多行文本语言模块定义



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

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

我试图修改点(.)匹配跨多行,但它实际上似乎并没有捕获整个块。我的理解是修饰语?m:应该起作用,但是没有。

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

是否有一种方法来声明一个语言定义正则表达式,将跨多行匹配?

使用单行修饰符:

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

你误解了(?m)修饰语。你的正则表达式总是应用在单行上。


    使用多行修饰符意味着你的正则表达式将把你的文本视为几行(这是默认行为),然后它将在每行周围添加^(...)$
  • 使用单行修饰符,不添加^(...)$,然后将.匹配rn

最新更新