3

SublimeTextの新しい構文定義を作成しようとしています。各行内の一致を強調するために正規表現を作成しましたが、一致に新しい行と任意の文字を含めたいと思います。1行で機能するtmLanguageファイルの正規表現は次のとおりです。

<key>match</key>
<string>\{\+\+(.*?)\+\+[ \t]*(\[(.*?)\])?[ \t]*\}</string>

ドット(。)の一致を複数行にまたがるように変更しようとしましたが、実際にはブロック全体をキャプチャしているようには見えません。私の理解では、修飾子?m:は機能するはずですが、機能しません。

<key>match</key>
<string>(?m:(\{\+\+(.*?)\+\+[ \t]*(\[(.*?)\])?[ \t]*\}))</string>

複数の行で一致する言語定義の正規表現を宣言する方法はありますか?

4

1 に答える 1

4

代わりに単一行修飾子を使用してください:

<key>match</key>
<string>(?s:(\{\+\+(.*?)\+\+[ \t]*(\[(.*?)\])?[ \t]*\}))</string>

あなたは(?m)修飾子を誤解しています。 正規表現は常に1行に適用されます。

  • 複数行の修飾子を使用すると、正規表現はテキストを数行と見なし(これはデフォルトの動作です)、^(...)$各行の周りに追加されます。
  • 単一行修飾子を使用する^(...)$と、追加されず、.一致します\r\n
于 2013-05-03T12:32:49.783 に答える