2

繰り返し文字間のテキストをキャプチャする正規表現を作成しようとしています。3 つの繰り返し文字間のテキストのみをキャプチャしたいのですが、4 つ以上の文字間のテキストは一致させたくありません。

例:

==Text not to capture==
===Text to capture===
====Text not to capture====
=====Text not to capture=====

この正規表現は、3 === 以上のものをキャプチャします。

(?<=[=]{3})(.*?)(?=[=]{3})

4 文字以上のものを除外するにはどうすればよいですか?

4

2 に答える 2

3

コードに否定的なルックアラウンドを追加して、=キャプチャしている部分の前後に別の部分がないことを確認できます。

(?<=(?<![=])[=]{3})(?![=])(.*?)(?<![=])(?=[=]{3}(?![=]))

それを分解して見たい場合:

最初の後読みでは、コードの前に===. 内部の否定的な後読みは、それが別の によって先行されていないことを保証し=ます。次に、先読みにより、別の が続かないことが保証され=ます。

(?<=(?<![=])[=]{3})(?![=])

=文字を含むことができるいくつかのものをキャプチャします。

(.*?)

そして===、ネストされたルックアラウンドを使用=して、外側に別のルックアラウンドがないことを確認し、別の (より小さい) ルックアラウンドを使用して、内側に別のルックアラウンドがないことを確認します。

(?<![=])(?=[=]{3}(?![=]))
于 2013-08-20T18:38:42.317 に答える