多行升华文本语言模块定义

时间:2013-01-20 23:46:28

标签: regex sublimetext2

我正在尝试为Sublime Text创建一个新的语法定义。我已经计算出正则表达式以突出显示每一行中的匹配但我希望匹配包括新行以及任何字符。这是来自tmLanguage文件的正则表达式,它在一行中起作用:

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

我试图修改与跨度多线匹配的点(。),但它实际上并不会捕获整个块。我的理解是修饰符?m:应该有效,但不是。

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

有没有办法声明一个匹配多行的语言定义正则表达式?

1 个答案:

答案 0 :(得分:4)

改为使用单行修饰符:

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

您误解了(?m)修饰符。 您的正则表达式始终应用于一行。

  • 使用多行修饰符意味着您的正则表达式会将您的文本视为多行(这是默认行为),然后它会在每行周围添加^(...)$
  • 使用单行修饰符时,系统不会添加^(...)$,然后.将匹配\r\n