2017-02-22 29 views
1

Вот мой код. Я пытаюсь сопоставить эту строку с моим регулярным выражением, но он терпит неудачу каждый раз на моем локальном сервере xampp и моем выделенном сервере. Удивительно, когда я тестирую это на regex101, он работает там как-то. Зачем ??php regex не работает во время работы над 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

Ваше регулярное выражение сбивает с толку. Что ты хочешь делать? – Mohammad

+0

У меня есть код соответствия что-то вроде строки, но они меняются каждый раз – Hutarsh

+0

Вы можете упростить его до '[0-9 * + = \ - # @ ×?] {2,3} (?: [\ [\]() .] {1,3} [0-9 * + = \ - # @ ×?] {2,3}) {4} ' – chris85

ответ

2

Вы должны использовать модификатор u, чтобы включить режим Юникод для регулярных выражений, так что × символ в предмет и шаблон не в пределах диапазона 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 
+0

Спасибо, человек :) – Hutarsh