私はDrupal用の正規表現ベースのフィルタを開発しています。これは正規表現/[asciidoc]((.|\n)*)\[\/asciidoc]
です。テキストに複数回現れた場合、[asciidoc]と[/ asciidoc]のすべてのインスタンスは、最初と最後のインスタンスと一致します。どのようにしてこの正規表現を定式化して、ネストまたは非貪欲なマッチングを避けることができますか?
例えば、コードに
[asciidoc] here is some text to be filtered[/asciidoc]
a bit of text
[asciidoc]some text in a second block[/asciidoc]
here is some text to be filtered
とsome text in a second block
ようなコードの断片は、フィルタによって処理されることになっているが、
here is some text to be filtered[/asciidoc]
a bit of text
[asciidoc]some text in a second block
は、最初と最後のブロック・マーカー間で一致されます。私がregex101
でテストすると、正規表現ではブロック内のコードがgreedy
のように一致するので、このブロックは必要なブロックのネストを許可しないnon-greedy
正規表現です。
正しい正規表現は何ですか?私は、正規表現の用語に精通していないので、誤っていくつかの用語を使用している可能性があります。
この '(。| \ n)は任意の文字に一致しますが、この' * 'は貪欲な量指定子です。後ろに疑問符「?」を付けることで、すべての量的限定子を非貪欲にすることができます。欲張りでないバージョンであっても、[asciidoc]はフィルタリングされるテキストです。[asciidoc] 少しのテキスト [asciidoc] 2番目のブロックのテキスト[/ asciidoc] '[/ asciidoc ] [/ asciidoc] "だから、正規表現を貪欲に責めないでください。 – sln