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