2021年06月11日 10:49 92 举报
PHP正则匹配替换包括换行在内的任意字符+ 分享我的经验
使用PHP正则匹配替换是比较常见的功能,匹配的内容中包含换行是个很容易被忽略的问题

第一种方式:[.\n]*?

//示例
preg_match_all('/<div class="list">[.\n]*?<\/div>/i', $s, $arr);

按道理这种方式应该是可以的,但我测试发现不行,因为这里中括号里面的“.”被当作一个普通的英文句号去处理了,而不是通配符,因此这里只能匹配到包含英语句号及换行符在内的任意内容了。

第二种方式:.*?

//示例
preg_match_all('/<div class="list">.*?<\/div>/is', $s, $arr);

这种方式是没问题的,但要记得后面加的/s修正符。

第三种方式:(.|\n)*?

//示例
preg_match_all('/<div class="con">(?:.|\n)*?<\/div>/i',$s,$arr);

与第一种方式相比,这里的“.”不会被当作普通字符处理,而是真正期望的通配符了,如此说来这种方式也没问题,但我在测试中发现,当要匹配的字符串 内容有点长的时候就不行了,再更换至高版本的php环境下去测试则正常,由此得出这应该跟php所绑定的PCRE库版本有关了。

第四种方式:[\s\S]*?

//示例
preg_match_all('/<div class="con">[\s\S]*?<\/div>/i', $s, $arr);

这种方式完全没问题,我在windows及linux环境下测试都通过,在各个常见的php版本下测试也通过。

最后还有一点需要注意的是,linux环境下是有\n(换行符)而没有\r(回车符)的,而windows环境下通常是\r\n(回车换行)连在一起的,测试匹配时得留意这个细节差异。

 

如果您觉得内容不错 那就联系作者( 站长 )投稿到您的网站吧
本文链接:https://www.zhanzhangshequ.com/102.html [ 点击复制 ] 喜欢(0) 收藏(0)
您需要 [ 登录 ] 后方可进行评论或回复
    很明显 沙发是空的 您看着办吧~
最新签到
时间 13:35:43签到 5次
时间 11:44:44签到 5次
时间 09:38:08签到 2次
时间 17:42:09签到 10次
时间 22:21:46签到 10次
时间 22:55:00签到 3次
时间 11:51:11签到 5次
时间 09:37:05签到 10次
最新来访
来访 237次 引流 13次
备案号皖ICP备13016897号-16
京公网安备34060002040025号
©2020-2021 BY 站长主题