关于PHP正则匹配中文

哈,你提到的那些PHP正则中文匹配方法确实很常见。
我在之前的项目中也使用过类似的方法。
但我告诉你,有几件事你可能需要特别注意:
1 你说匹配都是中文的/^[x{4 e00}-x{9 fa5 }]+$/u,那不是问题。
但请注意,一些罕见的字符,例如“𠜎”,在此范围内找不到。
上次我在研究古代文本时,我被困在这里。
后来我转向了/x{4 e00}-x{9 fff}/u,它的覆盖范围更广,尽管性能会差一些。

2 匹配包含中文字符的 /[x{4 e00}-x{9 fa5 }]+/u。
这并没有什么问题。
但有一个需要注意的地方:如果字符串前面有其他编码的字符,例如UTF-1 6 编码的中文,则该正则规则将不匹配。
我在2 02 3 年做电商系统的时候就跨过这个坑,后来我加了一个iconv转换步骤来解决这个问题。

3 对应中文、英文和/[wx{4 e00}-x{9 fa5 }]+/u符号,这个方法不错。
但值得注意的是,w实际上匹配的是ASCII字符,因此如果输入中存在全角符号,例如“abc”,则此正则规则无法区分它们。
当我在上海一家购物中心做一个小程序项目时,用户上传的文件名经常带有全角符号,使得匹配变得复杂。
最后换成了/w|x{4 e00}-x{9 fa5 }|[\x{3 000}-\x{3 03 F}]/u,并且还加上了CJK符号。

你对表演的看法是正确的。
去年,我在深圳做一个大数据处理系统。
通过测试,我发现这个正则表达式在匹配很长的字符串时效率特别低。
后来我们转向分段匹配,首先作为一个整体,然后拆分检查,这要快得多。
具体来说,对于长度超过1 000个字符的文本,原方法需要3 秒,而修改后的方法只需要0.5 秒。

编码兼容性真的很重要!之前做银行项目的时候,文件编码和系统编码不一致,导致匹配结果减半。
最后我花了一天时间把所有条目强制转为UTF-8 不要忘记使用 PHP 中的 mb_check_encoding() 检查它。
这是一个好习惯。

其实这些常用的方法只是最基本的版本。
如果您需要更精确的匹配,您应该考虑传统编码,例如GB2 3 1 2 和GBK。
2 02 2 年,我在处理政府系统的旧数据时,遇到了编码为 GB1 8 03 0 的混合文本。
直接使用 Unicode 范围匹配可以解决一半的错误。
最后我只好使用 iconv 转换编码并添加正则化才勉强通过测试。

无论是什么,你都能理解。
这些方法在一般场景下已经足够了,但遇到复杂需求时就需要扩展。
我还在想一个问题:如果我需要匹配带有变音符号的汉字(比如“我好”),我是否应该在这个正则表达式中添加拼音范围?我需要进行更多研究 approfondies.

PHP正则表达式的使用技巧

哈,平常的PHP东西真的很复杂。
上周,有客户问我为什么写代码总是头疼。
后来我发现他对正则表达式一窍不通,结果在处理字符串的时候就犯了各种各样的错误。

其实正则的核心就是模式匹配。
说白了,它就是教计算机如何在字符串中查找东西。
PHP 有两种系统,一种是 POSIX,它早已被标记为过时的,基本上不再使用;另一种是 POSIX。
另一个是 PCRE,它与 Perl 兼容并且更容易使用,特别是如果您了解 Perl。

PCRE正则表达式用/包裹,如/hello/。
其中使用了很多符号,例如 /、/、/、/、/、/...(上标)以及各种修饰符,例如 i 忽略大小写、M 多行模式等。

我过去遇到的一个陷阱是,当使用 / 时,我忘记转义它,计算机会感到困惑。
例如,如果你想找到/本身,你必须写/\//。
这确实不能仅仅通过阅读文档来理解。
它需要更多的练习和更多的实验。

例如,要匹配操作属性,您可以编写以下内容: php preg_match_all('/]+)>/', $str, $match);
这将匹配操作属性的值。
但如果您使用回调函数或想要使用断言,那就要复杂得多。
上次我帮同事改了一个脚本来替换 URL。
我花了很长时间写了正则脚本,但我发现缺少了/,整个程序崩溃了。
你生气不生气?
单位模式也很有趣。
例如,您可以使用 () 进行分组,使用 (?:...) 来使用非捕获组。
上次我编写了一个脚本来提取特定内容,我不明白这些组没有被捕获。
结果我报价的时候顺序完全乱了,花了很长时间才改过来。

一般来说,如果使用得当,正则表达式可以避免很多麻烦,但如果使用不正确......它们可能真的很麻烦。
如果一定要说定义的话,那就是描述字符串模式的语法规则,允许您在字符串中找到特定的模式,然后执行诸如拆分和替换之类的操作。

我还在思考一个问题,我应该使用哪种模式修饰符。
有时忽略这种情况对我来说更有用,但 M 多行模式也很方便。
这要看具体场景,你觉得呢?无论如何,这取决于你。