2012-04-05 162 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

相关问题