在regex101

时间:2017-02-22 12:25:14

标签: php regex pcre

这是我的代码。我试图将此字符串与我的正则表达式匹配,但每次在我的本地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";
}

?>

1 个答案:

答案 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