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

时间:2011-08-22 16:04:44

标签: php regex

我似乎无法找到这个问题的直接答案。

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

由于

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

例如,匹配单个字符串的/^.$/

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

结果:

int(1)
int(0)

即使你的模式中没有ascii表之外的字符,所以是/你确实有所作为。