PHP正则匹配字符串中的中文内容


如果标签里面有中文、英文、数字等混排,则需要对汉字进行特殊处理,由于PCRE不支持U P L之类的perl字符串处理转义,所以需要使用16进制或者Unicode进行处理

范例如下:
<?php
$str = "之二宽阔的甘家口东#标签1#标签2 #标签3。#标签4,都发$1234 ¥xc,cvm , ¥12,dflksjf如何#标签5.x #tag6.cvxcv“";
preg_match_all('/#([a-zA-Z0-9x7f-xff]+)/', $str, $mat);
print_r($mat);

preg_match("/[x{00a5}x{ffe5}](d+)/u", $str, $mat);
print_r($mat);
得到的结果如下:

Array
(
[0] => Array
(
[0] => #标签1
[1] => #标签2
[2] => #标签3。
[3] => #标签4
[4] => #标签5
[5] => #tag6
)

[1] => Array
(
[0] => 标签1
[1] => 标签2
[2] => 标签3。
[3] => 标签4
[4] => 标签5
[5] => tag6
)

)
Array
(
[0] => ¥12
[1] => 12
)

补充说明:
双字节字符编码范围

1. GBK (GB2312/GB18030)
x00-xff GBK双字节编码范围
x20-x7f ASCII
xa1-xff 中文 gb2312
x80-xff 中文 gbk

2. UTF-8 (Unicode)

u4e00-u9fa5 (中文)
x3130-x318F (韩文
xAC00-xD7A3 (韩文)
u0800-u4e00 (日文)


在测试这个脚本时候发现的一个小技巧:

估计应该是Windows7中文版本身的系统编码原因,所以,在测试上面这个脚本时,使用CMD控制台输出时,会出现乱码;
但是,当使用EditPlus执行输出时就没有乱码的问题。
(以后不论是测试PHP还是Python亦或是其他的脚本,都可以考虑用这种方法避免乱码带来的干扰。)
参考地址:

PHP正则匹配字符串中的标签 | Michael`s blog


《“PHP正则匹配字符串中的中文内容”》 有 1 条评论

  1. 正则 匹配 中文标点符号 小记
    https://blog.csdn.net/cysear/article/details/80435756
    `
    //匹配这些中文标点符号 。 ? ! , 、 ; : “ ” ‘ ‘ ( ) 《 》 〈 〉 【 】 『 』 「 」 ﹃ ﹄ 〔 〕 … — ~ ﹏ ¥
    var reg = /[\u3002|\uff1f|\uff01|\uff0c|\u3001|\uff1b|\uff1a|\u201c|\u201d|\u2018|\u2019|\uff08|\uff09|\u300a|\u300b|\u3008|\u3009|\u3010|\u3011|\u300e|\u300f|\u300c|\u300d|\ufe43|\ufe44|\u3014|\u3015|\u2026|\u2014|\uff5e|\ufe4f|\uffe5]/;

    select ‘找回密码:2;解绑手机并找回密码:1;转移’ as raw,
    ‘找回密码:2;解绑手机并找回密码:1;转移’ rlike ‘密码[:\\:\\=]{1}[a-zA-Z0-9]{0,5}[\\u4e00-\\u9fa5]+’,
    ‘找回密码:2;解绑手机并找回密码:1;转移’ rlike ‘密码[:\\:\\=]{1}[a-zA-Z0-9]{0,5}[\\uff1b|\\u3001|\\uff0c]?[\\u4e00-\\u9fa5]+’,
    ‘找回密码:2;解绑手机并找回密码:1;转移’ rlike ‘密码[:\\:\\=]{1}[a-zA-Z0-9]{0,5}[,。?:;‘’!“”…、\\u4e00-\\u9fa5]+’
    ;
    — 找回密码:2;解绑手机并找回密码:1;转移 false true true
    `
    正则表达式标点符号匹配 #简单粗暴,直接将对应的字符放入区间中
    https://blog.csdn.net/IT_dawdler/article/details/81701253

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注