如何检查两个可能的正则表达式?

时间:2013-11-13 13:28:12

标签: php regex

假设我想将某人的家庭住址解析为街道,门牌号码,城市..

在我的情况下,有两种(非常不同的)可能的方式来格式化数据。所以我想要检查两个非常长的正则表达式。如果正则表达式匹配,我想从这些正则表达式中导出数据。

1:

Long Square
25
London
...

2:

London
Living: Long Square, 25
....

我应该如何检查这两个?我应该使用只有两个if子句并逐个检查它们:

if (preg_match(@$match_regex, file_get_contents($tag->getAttribute("src")), $matches) == true)
{
  //regex 1 matched
}
else if ((preg_match(@$match_regex_2, file_get_contents($tag->getAttribute("src")), $matches) 
{
  //regex 2 matched
}
else
{
  //no match
}

或者我应该在一个正则表达式中以某种方式检查

像:

[regex_1|regex_2]

哪种方法优先,cpu“更快”?

2 个答案:

答案 0 :(得分:2)

最快的方法是搜索Living:文本,然后执行正则表达式:

$string = file_get_contents($tag->getAttribute("src"));
$matched = false;
$matches = array();

if (false === strpos($string, 'Living:')) {
    $matched = preg_match(@$match_regex, $string, $matches);
} else {
    $matched = preg_match(@$match_regex_2, $string, $matches);
}

if (!$matched) {
    // no match
} else {
    // print matches
}

请注意,我将两个逻辑分开了。第一个if块确定地址字符串的类型并执行正确的正则表达式。第二个if块检查是否发生了匹配(无论执行了哪个正则表达式)。

答案 1 :(得分:1)

不要对性能做出假设 - 测量它。

一个正则表达式将是

(regex1)|(regex2)

如果两个版本都针对您的数据运行它们并测量时间。