
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 href="(.*?[^jpg])" |
3 ALeo 2015-04-14 13:50:09 +08:00 preg_match_all('/href="(.[^jpg]*?)"/',$content,$matches); |
4 gkiwi 2015-04-14 13:51:57 +08:00 建议直接看看这个30分钟入门: http://www.jb51.net/tools/zhengze.html 正则是个小技巧,最好是花点时间学会,大概知道各种情况怎么处理,之后再遇见直接写或者看下手册都方便. |
5 phx13ye 2015-04-14 13:53:39 +08:00 href=".*?\.(?!jpg).*?" |
6 sneezry 2015-04-14 13:56:48 +08:00 [^jpg]把png也一起过滤了。 /href="((?:(?!\.jpg).)*)"/ |
7 iyaozhen 2015-04-14 13:57:27 +08:00 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 @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种情况。 |