Sublime Text regexが複数行タグを検出しない


129

ここにこの正規表現があります。

\[sometag\](.*)\[/sometag\]

[sometag]タグで囲まれたテキストをキャッチすることになっています。文字列のように、これらのタグに含まれる単一行の情報に対して機能します[sometag]this is a bit of text[/sometag]。ただし、次のように複数行にわたるテキストでは機能しません。

[sometag] here is more text

it spans more than one line [/sometag]

何らかの理由で、Sublimeテキストの正規表現ファインダーは、複数行にわたるタグを認識しません。これがSublime Textの問題か、切り替え可能なオプションなのか、あるいは正規表現に関する個人的な能力不足なのかを知りたいです。

回答:


239

最初に、dotall修飾子(?s)を使用して、改行文字にも一致するドットを作成します。

(?s)\[sometag\](.*?)\[\/sometag\]

デモ


ありがとう!なぜそれらの余分な疑問符を含める必要があるのですか?
Maurdekye 2014

8
?*は貪欲ではない試合をします。[b]foo[/b]foo[b]bar[/b]例として考えます。\[b\].*\[\/b\]開始bから最後の終了bまでの全体に一致します。
Avinash Raj 2014


11
(?s)ドットに改行も含める
cmroanirgo '10

3
アスタリスクの後の疑問符は、一致を貪欲ではないと定義するため重要です。
andrej

12

何らかの理由でドットのモードの変更が許可されない場合は、次のようにすることができます。

[sometag](.|\n)+?[/sometag]

3
(.|\n)+?DOTALL修飾子にアクセスできる場合は、使用しないでください。(?s)一部のfalvorで使用できない場合は、[\s\S]/ [\d\D]/を使用しますが、[\w\W]ここで提案されている代替パターンは使用しません。このパターンは非常に非効率的で、タイムアウトの問題を簡単に引き起こす可能性があります。
WiktorStribiżew2016年

1
@WiktorStribiżew:なぜ非効率なのか説明してくれませんか?私は常にを使用しています[\s\S]が、一見(.|\n)すると同等に見えるでしょうか?一致するグループと関係がありますか?しかし、その後(?:.|\n)は同じでしょうか?
ケルベロス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.