登录 注册

PHP正则匹配汉字

今天没事干自己写一个监控网站更新的小程序,写的时候遇到了正则匹配汉字的问题

原文内容类似于这样:

1月1日-1月2日
啊苏打撒旦的撒啊撒打算打算打洒洒
2月1日-2月2日
达到撒撒旦撒
.......


然后我一开始写的正则:

$reg2='/(\d{1,2})月(\d{1,2})日-\d{1,2}月\d{1,2}日([^日]+)\d月/';


然后我用sublime text的查找功能进行实验匹配,发现可以运行,然后我就去继续写PHP了。写完以后发现无法匹配。查阅资料后发现问题就出在[^日]上,因为在PHP中是按照字进行编译的,所以UTF-8编码下“日”有三个字符。继续查阅资料,得知可以用下面这个方式:

[^(\x{6708})]


其中编码是多少需要自己查询。。然后就改成了

$reg2='/(\d{1,2})月(\d{1,2})日-\d{1,2}月\d{1,2}日([^(\x{6708})]+)\d月/';


然后我们会发现这次不仅没法匹配了,而且还直接报错了。那么问题出在哪里呢?

继续查阅资料,原来需要以/u模式匹配(即为UTF-8模式)

$reg2='/(\d{1,2})月(\d{1,2})日-\d{1,2}月\d{1,2}日([^(\x{6708})]+)\d月/u';

这样,就可以正常运行了

2017
02 15
上一篇
Older
下一篇
Newer
评论
0
点击
1740
发布
我是标题
我是文字
我是标题
我是文字
用户名
密码
用户名
密码
重复密码
努力的加载中.....