正则表达式不适用于某些字符串

时间:2016-01-13 18:29:07

标签: regex

这两个字符串似乎是一样的。为什么正则表达式匹配一个而不是另一个?

.Modal .Contents

输出:

$str1 = "NЕТ";
$str2 = "NET";
if (preg_match("/NET/",$str1)){
    echo "Match string 1!";
}
else {
    echo "Does not match string 1!";
}
if (preg_match("/NET/",$str2)){
    echo "Match string 2!";
}
else {
    echo "Does not match string 2!";
}

1 个答案:

答案 0 :(得分:3)

剧透警告: $str1$str2 相同。

这是因为角色看起来一样,实际上是不同的:

$str1 = "NЕТ"; echo bin2hex($str1), "\n";
$str2 = "NET"; echo bin2hex($str2), "\n";

输出:

4ed095d0a2
4e4554

实际上,如果您打印出每个字符串中所有字符的名称及其Unicode代码点,您将获得$str1的第一个块和$str2的第二个块。

78 LATIN CAPITAL LETTER N
1045 CYRILLIC CAPITAL LETTER IE
1058 CYRILLIC CAPITAL LETTER TE

78 LATIN CAPITAL LETTER N
69 LATIN CAPITAL LETTER E
84 LATIN CAPITAL LETTER T