2011-07-15 8 views
0

私はこのようになります文字列を持っている、オプションパーツで後方参照を取得します削除の理由が続きます。今、私はそれを(私の場合、私はユーザー名をリンクする)これを置き換えるためにPHPのpreg_replaceで逆参照が必要です。私はかなりの表現を試しましたが、私が望む結果を得ることができません。ほとんどの場合、私の表現は、リンクがコロンの後に続く(リンクがコロンの直前で止まるようにしたい)という結果に終わります。正規表現は、

私が今使っている正規表現は次のようになります。

ここ
<?php preg_replace("/Submission ([0-9]+) (\(.*\)) was deleted by user (.*)(|: .*)/",'<span style="color:red;">Submission <a href="#">$1</a> $2 was deleted by user <a href="#">$3</a>$4</span>',$string) ?> 

、私は基本的にと思った(|:。*)は、空の文字列ORをチェックします(|)何もコロン(しかし、私は間違っていると思う)。

+0

なぜ 'に分割しない ":"'最初の? –

+0

分割?何を思っていたんだ? preg_split? – Nisto

+0

いいえ、最初に分割してください。 1つの問題で十分です。 –

答えて

1

あなたのコメントに基づいています。

私は*の後に?と書いてありましたが、これは貪欲ではありません。それがそうであったように、それはラインの終わりまですべてをつかんでいた。

...user (.*?)(: .*)?$ 

説明:

(.*?) # Match any number of chars as short as possible. 
(: .*)? # Match 0 or 1 of : .*. 
$  # Match the end of the line. 
+0

残念ながら、これはどちらも動作しません。リンクはまだコロンを越えて延びています。私はグループが互いに隣り合っていることと関係していると思います。 – Nisto

+0

私は正規表現を最初の '。*'の '' * ''を貪欲でないという意味に調整しました。できるだけ短い文字列にマッチします。 –

+0

すばらしい。どうもありがとう! – Nisto