2017-02-22 97 views
1

這是我的代碼。我試圖將此字符串與我的正則表達式匹配,但每次都會在本地xampp服務器和我的專用服務器上失敗。當我在regex101上測試這個功能時,它會以某種方式工作。爲什麼?php正則表達式不工作,而在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修改,以使對正則表達式的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 
+0

謝謝你:) – Hutarsh