这是我的代码。我试图将此字符串与我的正则表达式匹配,但每次在我的本地xampp服务器和我的专用服务器上都会失败。令人惊讶的是,当我在regex101上测试时,它会以某种方式在那里工作。为什么??
<?php
$str = "80 ×× ×× ×× ×× ××
×× ×× 91 94 ×× ××
";
echo strlen($str);
if (preg_match("/[0-9*+=\-#@×?]{2,3}[ \[\]().]{1,3}[0-9*+=\-#@×?]{2,3}[ \[\]().]{1,3}[0-9*+=\-#@×?]{2,3}[ \[\]().]{1,3}[0-9*+=\-#@×?]{2,3}[ \[\]().]{1,3}[0-9*+=\-#@×?]{2,3}/", $str)) {
echo "ok";
}else{
echo "no mto";
}
?>
答案 0 :(得分:2)
您需要使用u
修饰符为正则表达式启用unicode模式,因为主题和模式中的×
字符在ASCII字符范围内不。请注意模式定义中的尾随/u
:
<?php
$str = <<<EOT
80 ×× ×× ×× ×× ××
×× ×× 91 94 ×× ××
EOT;
if (preg_match("/[0-9*+=\-#@×?]{2,3}[ \[\]().]{1,3}[0-9*+=\-#@×?]{2,3}[ \[\]().]{1,3}[0-9*+=\-#@×?]{2,3}[ \[\]().]{1,3}[0-9*+=\-#@×?]{2,3}[ \[\]().]{1,3}[0-9*+=\-#@×?]{2,3}/u", $str)) {
echo "ok";
} else {
echo "no mto";
}
输出显然是:
ok