Php 我的正则表达式有什么错误?

Php 我的正则表达式有什么错误?,php,html,regex,Php,Html,Regex,我想匹配所有href属性,这些属性包含一个没有url的字符串,该字符串是本地文件路径,因此我编写以下php代码: preg_match_all('/href="[^(http|https):\/\/](.*?)"/is',$tidyHtml,$matches); 这将返回如下数组: Array ( [0] => tatic/css/custom.css ) 但是当你看不到html源代码时,href属性是static/css/custom.css而不是static/css/cus

我想匹配所有
href
属性,这些属性包含一个没有url的字符串,该字符串是本地文件路径,因此我编写以下php代码:

preg_match_all('/href="[^(http|https):\/\/](.*?)"/is',$tidyHtml,$matches);
这将返回如下数组:

Array
(
    [0] => tatic/css/custom.css
)

但是当你看不到html源代码时,
href
属性是
static/css/custom.css
而不是
static/css/custom.css
你必须去掉方括号。它们表示要匹配的字符列表,而不是节

您还必须使用反向查找而不是反向字符类。查看此带有此匹配项的正则表达式:

/(?<=href=")(?!https?:\/\/)(.*?)"/is

/(?您必须去掉方括号。它们表示要匹配的字符列表,而不是节

您还必须使用反向查找而不是反向字符类。请参阅此带有此匹配项的正则表达式:

/(?<=href=")(?!https?:\/\/)(.*?)"/is

/(?要解决此问题,必须像这样使用负前瞻

/href="(?!https?:\/\/)(.*?)"/is
它基本上会检查字符串中任何一点是否包含
href=“
”,并通过可选的
s
后跟
://
查看下一个字符是否为
http
。 如果不是这种情况,它会将迭代器向前移动,并将所有内容捕获到第一个双引号


如何将src属性添加到此正则表达式?–Mokhtarabadi

通过使用or操作检查
href
src

/(?:href|src)="(?!https?:\/\/)(.*?)"/is

然后将是对
href
src
属性的结果正则表达式检查,只匹配URL中没有协议的引用。

要解决此问题,必须像这样使用负前瞻

/href="(?!https?:\/\/)(.*?)"/is
它基本上会检查字符串中任何一点是否包含
href=“
”,并通过可选的
s
后跟
://
查看下一个字符是否为
http
。 如果不是这种情况,它会将迭代器向前移动,并将所有内容捕获到第一个双引号


如何将src属性添加到此正则表达式?–Mokhtarabadi

通过使用or操作检查
href
src

/(?:href|src)="(?!https?:\/\/)(.*?)"/is

然后将是对
href
src
属性的结果正则表达式检查,只匹配URL中没有协议的引用。

为什么这个正则表达式有方括号?@Unihedron-编写快速自定义正则表达式(这不起作用,您必须寻求帮助)之间有区别从一些HTML中提取代码,并编写一个使用正则表达式的正确HTML解析器(答案似乎是这样的)。为什么这个正则表达式有方括号?@Unihedron-编写一个快速的自定义正则表达式(这不起作用,你必须寻求帮助)是有区别的从一些HTML中提取代码,并编写一个使用正则表达式的正确HTML解析器(答案似乎是这样的)。如何向这个正则表达式添加src属性?对不起,我是伊朗人,英语说得不好,我想/(?@Unihedron非常感谢。如何在这个正则表达式中添加src属性?对不起,我是伊朗人,英语说得不好,我想混合/(?@Unihedron非常感谢。谢谢,你是对的,我感到困惑。但是我不知道如何回滚到你的修订版,Unihedron。谢谢,你是对的,我感到困惑。但是我不知道如何回滚到你的修订版,Unihedron。