【问题标题】:Multiline sublime text language module definition多行 sublime text 语言模块定义
【发布时间】:2013-01-20 23:46:28
【问题描述】:

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

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

我尝试修改点 (.) 匹配以跨越多行,但它实际上似乎并没有捕获整个块。我的理解是修饰符 ?m: 应该可以工作,但不能。

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

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

【问题讨论】:

  • 我不认为这会给出正确的匹配,但我还是尝试了。没有运气。

标签: regex sublimetext2


【解决方案1】:

改用单行修饰符:

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

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

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

【讨论】:

    猜你喜欢
    • 2014-05-17
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 1970-01-01
    • 2016-02-29
    • 1970-01-01
    • 1970-01-01
    • 2013-10-26
    相关资源
    最近更新 更多