在PHP中使用preg_match时,我应该关心多字节字符串吗?


Should I care about multi-byte character strings when using preg_match in PHP

对于这个问题我似乎找不到一个直接的答案。

如果我的模式不包含ascii范围以外的字符,我需要/u修饰符吗?文档似乎不这么认为。如果要匹配的字符串是UTF-8,我仍然会匹配我想要的字符,不是吗?

谢谢

不是模式是否包含utf字符,而是要匹配的字符串是否包含utf字符。您可能不会寻找非ascii字符,但如果字符串中有任何多字节字符,则您的模式可能匹配UTF字符中的"额外"字节之一。

我无法测试您的第二个问题,因为我面前没有PHP环境,但是第一个问题的答案是否定的。如果您只处理ASCII字符,则不需要/u

以匹配单个字符串的/^.$/为例。

var_dump( preg_match( '/^.$/u','族' ) );
var_dump( preg_match( '/^.$/','族' ) );
结果:

int(1)
int(0)

所以当你的模式中没有ascii表以外的字符时,yes/u也会产生影响。