preg_match_all('/href="(.*?)"/',$content,$matches);
默认是匹配所有href后缀类型(.com .html .jpg)
如何排除.jpg的后缀类型,求指点
preg_match_all('/href="(.*?)"/',$content,$matches);
默认是匹配所有href后缀类型(.com .html .jpg)
如何排除.jpg的后缀类型,求指点
|
SeptembersApr 14, 2015
1
|
|
2
href="(.*?[^jpg])"
|
|
3
preg_match_all('/href="(.[^jpg]*?)"/',$content,$matches);
|
|
4
建议直接看看这个30分钟入门: http://www.jb51.net/tools/zhengze.html
正则是个小技巧,最好是花点时间学会,大概知道各种情况怎么处理,之后再遇见直接写或者看下手册都方便. |
|
5
href=".*?\.(?!jpg).*?"
|
|
6
[^jpg]把png也一起过滤了。
/href="((?:(?!\.jpg).)*)"/ |
|
7
href="(.*?[^jpg])"
|
|
sneezryApr 14, 2015
8
@iyaozhen 'href="www.xxx.com/aa.png"'.match(/href="(.*?[^jpg])"/)
|
|
ArrowingApr 14, 2015
10
@gkiwi href="(.*?[^jpg])"这个的话,仅适用于当前小范围的问题,如果需要匹配的后缀最后一位字母是jpg其中一位,就不适用了。
稍微改了下: href="(.*\.[^j][^p][^g])" |
|
endoffightApr 14, 2015 via Android
12
路上的少了个?非贪婪
href="/1.jpg.jpg.gif.jpg.gif" .gif" 就错了 |
|
qinghApr 14, 2015
13
/^((?!.*?\.jpg).+)/
|
|
iyaozhenApr 14, 2015
14
@sneezry 大神,能否简单说明下,为什么要那么写。
感觉 (?!jpg) 就够了,这个意思不是向前查找但不匹配 "jpg" 吗?但结果和想象中的不一样。 还有 (?:(?!\.jpg).)* 中的 .)* 这里怎么理解。 |
|
sumhatApr 14, 2015
15
/href=".*(?<!\.jpg)"/
|
|
16
@iyaozhen ?!不匹配内容,只是给出位置,和^、$、\b类似的。
(?!\.jpg) 找出后面跟着的不是.jpg的位置 (?!\.jpg). 找出后面跟着的不是.jpg的任意字符 (?:(?!\.jpg).) 不要给找出符合条件的任意字符分配组号,因为我们不想单独提取它们 (?:(?!\.jpg).)* 这些符合条件的字符重复多次 |
|
imn1Apr 14, 2015
19
本以为很简单的问题,没想到你还问了两帖~
还是根据具体应用写吧,想一条通用涵盖是比较难的 (?:(?!ABC).)* 这种写法简单讲适用于一段字串中不含有“ABC”这个子串,不论ABC位置在哪 @sneezry 已经做了说明 但不同网站很难归一,有些是xxx.jpg,有些是xxx.jpg.html,有些是xxx.html都指向一个图片,所以一个正则面向一个或类似网站比较好 另外提醒一下,仅用 href 也可能匹配到 js 或其他,最好把标签也带上 <a [^>]*href=['"]…… |
|
p1n3Apr 14, 2015 via iPhone
20
好像已经解决了。。
在正则中用于判断某个子串是存在,可以使用下面的。 零宽度正预测先行断言,零宽度正回顾后发断言,零宽度负预测先行断言,零宽度负回顾后发断言 然后还可以前和后,才有4种情况。 |