PHP:从ereg到preg_match

时间:2011-11-04 10:20:57

标签: php regex preg-match ereg

我有一个从旧脚本到preg_match的以下ereg表达式。但正则表达式不是我最强的观点,所以我不确定在哪里改变它。如何将以下POSIX正则表达式转换为Perl兼容的Regex库?

if (!preg_match("^[^@]{1,64}@[^@]{1,255}$", $email))

if (!preg_match("^(([A-Za-z0-9!#$%&'*+/=?^_`{|}~-][A-Za-z0-9!#$%&?'*+/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$", $local_array[$i]))

if (!preg_match("^\[?[0-9\.]+\]?$", $email_array[1]))

if (!preg_match("^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|?([A-Za-z0-9]+))$", $domain_array[$i]))

提前致谢。

干杯,H

1 个答案:

答案 0 :(得分:3)

您需要将正则表达式括在一对分隔符中:

preg_match('/regex/', $srtring)
            ^     ^

请注意,如果正则表达式本身具有分隔符,那么您必须通过在\前面对其进行转义。

所以你的第二个例子看起来像:

if (!preg_match("/^(([A-Za-z0-9!#$%&'*+\/=?^_`{|}~-][A-Za-z0-9!#$%&?'*+\/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\/"))$", $local_array[$i]))
                 ^                     ^                               ^

或者,您可以选择正则表达式中不存在的分隔符。