对于这个问题我似乎找不到一个直接的答案。
如果我的模式不包含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也会产生影响。