1

PHP preg_match関数の実装があり、既知の正規表現を別の変数のクリーンアップされたバージョンと比較しています。複数のpreg_replaceなどのコマンドを使用してクリーニングしています。同じロジックを実行する別の方法がありますか?それはより小さく(おそらく1つのreg一致のみを含む)、より高速です(複数回の一致は、1回だけ実行するよりも複雑です)。

これが私の現在のコードです:

$url_regex_to_match = /SOME_REGEX/; //I will pick this from DB

$matches = array();

//Following to replace http://www.google.com into http://google.com
preg_match('/(http.?):\/\/(www\.)?(.*)/i', $url, $matches);
if(sizeof($matches)==4) {
    $url = $matches[1]."://".$matches[3]; 
}
//Incase the preg_match is false (http is missing), we still need to remove www.
$url = preg_replace("/(^\*?|\/\/)www\./i","$1",$url);

//It converts google.com/a#mno into google.com/a
$url = preg_replace('/^(.*)(#.*)$/', '$1', $url);
//It converts pages like google.com/index.htm into google.com/
$url = preg_replace('/^(.*\/)((home|default|index)\..{3,4})(\?.*)*$/', '$1$4', $url);
//This will replace google.com/ into google.com
if(substr($url, -1) == "/") {
    $url = substr($url, 0, -1);
}

//This is just to match the new URLs with the pattern I have
$boolean = preg_match($url_regex_to_match , $url);

ブール値の期待値はもちろんtrue/falseです。

ありがとう

4

1 に答える 1

0

一体何がしたいのだろう。ドメインの抽出は、次のような単一の新しい正規表現で実行できることを意味します。

preg_replace/http[s]*:\/\/[\w\d\.-]*\.([\d\w-]*)\..+\/(.*)/i,"$1")

したがって、基本的に私の答えは、多くの代わりに問題に対して1つの正規表現を作成することです。他の方法では、基本的にコンピューターが正規表現が検索するものを理解し、それをまとめる必要があるため、他に何をすべきかわかりません(正規表現が遅くなる可能性が最も高い)。私の解決策が役に立たない場合は、コメントでお知らせください。

編集:申し訳ありませんが、正規表現を明確にしました。

于 2012-05-14T15:13:05.573 に答える