假设我想将某人的家庭住址解析为街道,门牌号码,城市..
在我的情况下,有两种(非常不同的)可能的方式来格式化数据。所以我想要检查两个非常长的正则表达式。如果正则表达式匹配,我想从这些正则表达式中导出数据。
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“更快”?
答案 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)
如果两个版本都针对您的数据运行它们并测量时间。