2010-11-25 10 views
4

最近、私は正規表現で「幅ゼロの要素」を見てきました。彼らは何ですか?彼らはゴーストデータとして扱うことができるので、置換のために置換されず、()が一致すると、matches[1]matches[2]などに入りませんか?正規表現のゼロ幅要素は何ですか?

さまざまな用途に適したチュートリアルはありますか?彼らは長い間ここにいましたか?どのバージョンのO'Reillyの正規表現の本が最初にそれらを議論したのですか?

+0

私たちが同じページにいることを確認するだけで、ここに書かれているような主張について話していますか? http://msdn.microsoft.com/en-us/library/h5181w5w(v=VS.71).aspx – Welbog

+0

はい、 '?!'、 '?<!'、 '?<=' –

+0

それらの多く。問題がある特定のものはありますか?そうでない場合は、アサーションに関するドキュメント(http://msdn.microsoft.com/en-us/library/bs2twtah(v=VS.71).aspx)と上記のコメントのリンクを参照することをお勧めします。 NETとにかく)。 .NETの正規表現やその他の方言で作業していますか? – Welbog

答えて

4

ゼロ幅ルックアサーションアサーションのポイントは、特定の正規表現が実際にマッチに追加することなく、現在の位置から前方または後方を照らし合わせることができるかどうかをチェックすることです。だから、彼らはキャプチャグループにはカウントされません。そして、彼らのマッチは(最初にマッチしないので)置き換えられません。

Regex.Replace("ab", "(a)(?=(b))", "$1$2"); 

abbを返します。

ただし、でき C#で、例えばmatches[1]など

に行くことを前後参照アサーション内のキャプチャグループを持っています。

一般的な正規表現に関するオンラインチュートリアルは、http://www.regular-expressions.info(一部の地域では古くなっていますが)でもご覧いただけます。

zero-width lookaround assertions(およびPart II)の特定のセクションが含まれています。

もちろん、それらはMastering Regular ExpressionsRegular Expressions Cookbookの両方で詳細に説明されています。

+0

ゼロ幅の正規表現内のキャプチャグループは、PCREを含む多くのregex実装で取得されます –

関連する問題