我似乎无法找到这个问题的直接答案。在PHP中使用preg_match时我应该关心多字节字符串
如果我的模式不包含ASCII范围,我需要的以外的字符/ U修饰符?该文件似乎不建议。如果匹配的字符串是UTF-8,我仍然会匹配我不想要的字符?
感谢
我似乎无法找到这个问题的直接答案。在PHP中使用preg_match时我应该关心多字节字符串
如果我的模式不包含ASCII范围,我需要的以外的字符/ U修饰符?该文件似乎不建议。如果匹配的字符串是UTF-8,我仍然会匹配我不想要的字符?
感谢
我无法测试出你的第二个问题,因为我没有在我面前PHP环境,但回答的第一个问题是没有。如果您只处理ASCII字符,则不需要/u
。
这不是模式是否包含utf字符,而是您要匹配的字符串是否。您可能不会查找非ASCII字符,但如果字符串中有任何多字节字符,则您的模式可以与UTF字符中的“额外”字节之一匹配。
虽然多字节序列不包含任何字节的任何7位ASCII代码,但它不是UTF-8的一点吗?因此,如果正则表达式引擎是8位清理的,那么无论多字节内容如何,在UTF-8编码的字符串中都不会匹配ASCII字符仍然可以。毕竟,所有的多字节UTF-8序列都具有始终设置第一位的字节。 –
接招例如一个字符串匹配/^.$/
。
var_dump(preg_match('/^.$/u','族'));
var_dump(preg_match('/^.$/','族'));
结果:
int(1)
int(0)
所以,是的/ U确实有差别,甚至当你在你的模式没有ASCII表之外的字符。
你试过了吗? :) – Furicane