为什么这个正则表达式在PHP中失败?

时间:2011-01-28 11:51:58

标签: php regex email

我直接从RegExr获得了表达式,但PHP在=

时出现问题
"/[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/"

表达式用于匹配电子邮件地址。

3 个答案:

答案 0 :(得分:3)

您使用/作为标记模式开始和结束的分隔符,但随后也在模式中使用了该字符。您必须使用不同的分隔符,或在模式中转义它的实例。如果你想逃避等号,那么你使用了错误的斜线。

答案 1 :(得分:2)

转义=之前的斜杠(以及该表达式中的其他斜杠)。您使用/作为分隔符,因此如果它出现在模式中,则必须对其进行转义。

"/[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/"
那么

应该有用。

答案 2 :(得分:1)

您使用/作为分隔符。正则表达式中有两个/未转义。将它们转义为\/

"/[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/"
                 ^^                                ^^