Quantcast
Channel: idea » PHP常识
Viewing all articles
Browse latest Browse all 4

PHP正则无法匹配出Html中内容的原因

0
0

用PHP正则匹配Html页面body中的内容,内容以复杂就无法匹配出

preg_match('/<body>(.*)<\/body>/ui', $html, $matches);

关键出错就出在这个正则上面,网上google了一下,发现下面这个正则可用

preg_match('/<body>([\d\D]*?)<\/body>/ui', $html, $matches);

初看两个没什么不同,但经过仔细观察发现错误原来在“ . “这个点号匹配上,”.”匹配的是除了换行符(\n)之外的任何字符。html中自然有很多换行所以就导致匹配终止,出现0次匹配成功。查看PHP正则,在模式修正中有一个修正符“ s ” 是将整个匹配内容看成一行字符串。于是得出了正确的正则表达式:

preg_match('/<body>([\d\D]*?)<\/body>/uis', $html, $matches);

测试即可成功。果然败在了细节,手册之类的要看仔细,否则容易忽略某个致命细节。


Viewing all articles
Browse latest Browse all 4

Latest Images

Trending Articles





Latest Images