我希望匹配包含没有任何url的字符串的所有href
属性,字符串是本地文件路径,所以我写了这个php代码:
preg_match_all('/href="[^(http|https):\/\/](.*?)"/is',$tidyHtml,$matches);
这会返回一个这样的数组:
Array
(
[0] => tatic/css/custom.css
)
但是,当T看到html来源时,href
属性为static/css/custom.css
而不是static/css/custom.css
。
答案 0 :(得分:3)
你必须摆脱方括号。它们表示要匹配的字符列表,而不是部分。
您还必须使用负向lookbehind而不是倒置字符类。看到这个带有这场比赛的正则表达式:
/(?<=href=")(?!https?:\/\/)(.*?)"/is
这是regex demo!
如何将src属性添加到此正则表达式?
您只需使用OR语句:
/(?<=href="|src=")(?!https?:\/\/)(.*?)"/is
答案 1 :(得分:2)
要解决这个问题,你必须使用像这样的负面预测
/href="(?!https?:\/\/)(.*?)"/is
它基本上会在字符串中的任意位置检查包含href="
的字符串,然后查看下一个字符是否为http
,并带有可选s
后跟://
。
如果不是这种情况,它会向前移动迭代器并捕获所有内容,直到第一个双引号"
。
如何将src属性添加到此正则表达式? - Mokhtarabadi
使用or-operation检查href
或src
/(?:href|src)="(?!https?:\/\/)(.*?)"/is
然后将检查href
和src
属性的结果正则表达式,仅匹配URL中没有协议的引用。