2011-05-24 21 views
3

複数の正規表現をPHP(または一般的に)で実行する方が良いでしょうか?PHPでの複数の正規表現

英数字以外の文字をダッシュ​​で置き換えるには以下のコードがあります。置き換えが行われると、複数のダッシュのインスタンスを削除します。

$slug = preg_replace('/[^A-Za-z0-9]/i', '-', $slug); 
$slug = preg_replace('/\-{2,}/i', '-', $slug); 

これを行うにはもっとうまくいく方法がありますか?つまり、正規表現パターンを設定して1つのパターンを置き換え、次にもう1つのパターンを置き換えます。あなたが持っているもの

(それが正規表現に来るとき、私はソケットにフォークで子供のようだ)

答えて

4

あなたはあなたが本当に最初のものに何を意味するかと言って二preg_replaceを排除することができます:あなたが本当に何を意味

$slug = preg_replace('/[^a-z0-9]+/i', '-', $slug); 

「は、単一のハイフンで一つ以上の英数字以外の文字のすべての列を置換」でありますそれは/[^a-z0-9]+/iの機能です。また、大文字小文字を区別しない正規表現を指定するときに大文字と小文字を含める必要はありません。

+0

ありがとう、それは完璧な意味があります。 – navitronic

2

号には、この問題に対処するための適切な方法です。

この角度から考えてみましょう:正規表現はパターン(シングルパターン)を見つけて何とか処理するためのものです。そのように、一度に複数のパターンに対処しようとすることによって、あなたは頭痛だけを与えています。それは、関係者全員にとって、それなりの価値があります。

+0

私はこれを難しい方法で学んだ。 – csano

0

$slugは、すでに複数のハイフンを持っていないなら、あなたはこのように最初にpreg_replaceコール使って、第二にpreg_replace呼び出しを避けることができます。コードの上

$slug = preg_replace('/[^a-z0-9]+-?/i', '-', $slug); 

は、英数字以外の文字オプションでは、ハイフンでを追っでしょうし、一致するテキストを単一のハイフン-に置き換えます。したがって、2回目のpreg_replace呼び出しを行う必要はありません。

+0

あなたが提案しているもののバリエーションについて受け入れられた回答を見てください。これは私の意見では少し柔軟です。しかし、返信をありがとう。 – navitronic