2011-06-22 6 views
0

交互配置から1つの代替案にマッチするものがあれば、代替案が残っていてもすぐに停止します(交替外の正規表現には他のトークンはありません)。交替内での混乱

Source

1つのダブルワード(例えば、this this

\b([a-z]+)((?:\s|<[^>]+>)+)(\1\b) 

私はこのテーマをご紹介している場合、私は1つの混乱を持っている検索このパターン:それは摂餌と一致

を。

"<i>whatever<i>   whatever" 

\b([a-z]+)マッチ

((?:<[^>]+>|\s)+) 1つのTAG、その第二の代替の試合に従います。

(\1\b)最初のカッコで逆参照された同じ単語の後に一致する必要があります。

タグが '(\1\b)'の後にない場合は、空白に続けて一致するのはなぜですか。

私は交替内にそれがあることを知っています\s

しかし、TAGの一致が交替を消費するとは考えられていませんか?

なぜ\s代替がまだ生きていますか?

+0

あなたがしようとしていることは不明です。私は正規表現を開発するときにこのツールを使用することをお勧めします:http://gskinner.com/RegExr/ –

答えて

2

交代は+数量詞によって制御されます。

(?:\s|<[^>]+>)+ 

...ので、複数回を一致させようとします。毎回、どちらの方法も試してみることもできます。最初は\s、失敗した場合は<[^>]+>となります。

初めて\sが一致しませんでしたが、<[^>]+>が一致すると成功しました<i>

もう一度、\sが1つのスペースに一致します。

3回目は、\sが別のスペースと一致します。

...など、すべてのスペースが消費されるまで続きます。

2

この+は、「(?:\s|<[^>]+>)の1つ以上」を意味します。はい、の最初のがタグを消費しますが、その後に(\1\b)が続く前に無数の追加タグまたは空白が存在する可能性があります。

\b([a-z]+)((?:\s|<[^>]+>)+)(\1\b) 
         ^
+0

助けてくれてありがとうが、私は2つの答えを与えることはできません。そしてそのページは私に、アランの後に数秒後に答えてくれたので、私は彼に答えを与えた、私はあなたの答えを票決した。ありがとう – nEAnnam

+0

2つの答えが異なる言葉で同じことを言うとき、それはしばしばそのように行われます。 – AndreKR