2012-04-05 39 views
0

我對常規表達式不太瞭解,所以我不明白爲什麼我會出現此錯誤。使用正則表達式時出現未知修飾符錯誤

我用下面的代碼匹配字符串$str中的所有郵件,並將其保存在陣列$match在:

preg_match_all(
    "/^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-][email protected][a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/", 
    $str, 
    $match 
); 

顯然有在正則表達式的問題(這是我從here了),因爲我得到這個錯誤:

Warning: preg_match_all() [function.preg-match-all]: Unknown modifier '=' in C:\xampp\htdocs\project\Framework\Sanitizer.class.php on line 38

有人可以告訴我什麼問題?

謝謝

回答

4

你必須躲避着斜槓在該等號之前,例如:

preg_match_all(
    "/^[a-zA-Z0-9.!#$%&’*+\/=?^_`{|}~-][email protected][a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/", 
    $str, 
    $match 
); 

「/」是th整個表達式的e分隔符,所以它必須在正則表達式本身中逃脫

+0

太棒了,它工作! – federicot 2012-04-05 19:51:14

1

您需要使用反斜槓轉義該字符串中的許多字符。 其中一些你想逃避的是:/?^ {|}。

我會寫這樣的:

preg_match_all(
    "/^[a-zA-Z0-9.!#$%&’*+\/=\?\^_`\{\|\}~-][email protected][a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/", 
    $str, 
    $match 
); 

我覺得這個網站非常有用,當涉及到匹配電子郵件不會忽略:

http://www.regular-expressions.info/email.html

+0

可能要準確指出哪些字符的用法需要被轉義。有幾個地方他們是一個有效的非慣性使用。 – 2012-04-05 19:48:55

+0

我不是正則表達式的專家,但是當涉及到電子郵件匹配的正則表達式時,我發現這是一個有用的網站:http://www.regular-expressions.info/email.html。 – 2012-04-05 22:27:24

相關問題