为什么regexlib.com的reg表达式不能在PHP中运行?

时间:2010-07-08 06:10:14

标签: php regex

我在http://regexlib.com/REDetails.aspx?regexp_id=73上发现了一个正则表达式 它用于将电话号码与国际代码匹配,如下所示:

^(\(?\+?[0-9]*\)?)?[0-9_\- \(\)]*$

使用PHP的preg_match时,表达式失败了吗?那是为什么?

2 个答案:

答案 0 :(得分:3)

您需要使用/分隔符包围它:

preg_match('/^(\(?\+?[0-9]*\)?)?[0-9_\- \(\)]*$/', $phoneNumber)

并确保不要遗漏反斜杠(\)。

答案 1 :(得分:2)

因为preg_match期望正则表达式被分隔,通常使用斜杠(但正如下面正确指出的那样,只要匹配就可以使用其他字符):

preg_match('/^(\(?\+?[0-9]*\)?)?[0-9_ ()-]*$/', $subject)

除此之外,原始正则表达式被复制错误 - 几个字符未转义。 regexlib上的原文也有一些瑕疵(有些角色不必要地逃脱)。