0

誰かの家の住所を通り、家の番号、市区町村に解析したいとしましょう..

私の場合、データをフォーマットする方法として 2 つの (非常に異なる) 方法が考えられます。そのため、確認したい非常に長い正規表現が 2 つあります。正規表現が一致する場合、それらの正規表現からデータをエクスポートしたいと思います。

1:

Long Square
25
London
...

2:

London
Living: Long Square, 25
....

これらの両方を確認するにはどうすればよいですか?if 句を 2 つだけ使用して、次のように 1 つずつチェックする必要があります。

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
}

または、1つの正規表現で何とかチェックする必要がありますか?

お気に入り:

[regex_1|regex_2]

どちらの方法が優先され、CPUが「高速」になりますか?

4

2 に答える 2

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
}

2 つのロジックを分離していることに注意してください。最初ifのブロックは、アドレス文字列のタイプを決定し、適切な正規表現を実行します。2 番目ifのブロックは、一致が発生したかどうかをチェックします (実行された正規表現に関係なく)。

于 2013-11-13T13:33:15.553 に答える
1

パフォーマンスについて推測するのではなく、測定してください。

1つの正規表現は

(regex1)|(regex2)

両方のバージョンがある場合は、データに対してそれらを実行し、時間を測定します。

于 2013-11-13T13:35:14.170 に答える