0

正規表現内で、代替からの1つの代替に一致する場合、さらに代替が残っていても、そこで停止すると仮定します(代替の外側の正規表現には他のトークンはありません)。

ソース

1 つのダブル ワードを検索するこのパターン (例: this this)

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

この主題を紹介すると、1 つの混乱があります。

パタンと一致します。

"<i>whatever<i>         whatever"

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

((?:<[^>]+>|\s)+)1 つの TAG に続くので、2 番目の代替一致。

(\1\b) 最初の括弧で後方参照された同じ単語が続く場合、一致する必要があります。

(\1\b)タグの後に「 」が続かず、空白が続く場合、なぜ一致するのですか。

交互に存在することを知っています\s

しかし、TAG マッチがオルタネーションを消費することは想定されていませんか?

\s代替案がまだ生きているのはなぜですか?

4

2 に答える 2

2

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

\b([a-z]+)((?:\s|<[^>]+>)+)(\1\b)
                         ^
于 2011-06-22T02:01:21.590 に答える
2

交代は+量指定子によって制御されます。

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

...だから、複数回一致しようとします。毎回、最初\sに 、失敗した場合はの両方の選択肢を試す場合があります<[^>]+>

1回目はマッチングに\s失敗する<[^>]+>が、マッチングに成功<i>

2 回目は、\s1 つのスペースに一致します。

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

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

于 2011-06-22T02:01:48.167 に答える