gpt4 book ai didi

Sublime Text tmLanguage 文件中的正则表达式不使用多行

转载 作者:行者123 更新时间:2023-12-01 02:06:12 25 4
gpt4 key购买 nike

我正在尝试创建一个自定义语法语言文件来突出显示并帮助在 Sublime Text 2 中创建新文档。我已经走了很远,但我遇到了有关 tmLanguage 文件中正则表达式搜索的特定问题。我只是希望能够在 YAML 文档中的多行上匹配正则表达式,然后我将其转换为 PList 以在 Sublime Text 中作为包使用。它不会工作。

This是我的正则表达式:

/(foo[^.#]*bar)/

这是它在 tmLanguage YAML 文档中的外观:
patterns:
- include: '#test'

repository:
test:
comment: Tester pattern
name: constant.numeric.xdoc
match: (foo[^.#]*bar)

如果我将此 YAML 构建为 tmLanguage 文件并将其用作 Sublime Text 中的包,我将创建一个使用此自定义语法的文档,尝试一下,会发生以下情况:

这将匹配:
foo 12345 bar

这将不匹配:
foo
12345
bar

a Regex tester ,它们应该并且将会匹配,但是在我的 tmLanguage 文件中它不起作用。

我也已经尝试在 tmLanguage 文件中向我的正则表达式添加修饰符,但以下内容要么不起作用,要么完全破坏文档:
match: (/foo[^.#]*bar/gm)
match: /(/foo[^.#]*bar/)/gm
match: /foo[^.#]*bar/gm
match: foo[^.#]*bar

Note: My Regex rule works in the tester, this problem occurs in the tmLanguage file in Sublime Text 2 only.



任何帮助是极大的赞赏。

编辑:我使用匹配而不是开始/结束子句的原因是因为我想使用捕获组为它们提供不同的名称。如果有人有一个包含开始和结束子句的解决方案,您仍然可以以不同的方式命名 'foo'、'12345' 和 'bar',那我也可以。

最佳答案

我发现这是不可能的。这是直接来自TextMate Manual ,这是基于 Sublime Text 的文本编辑器。

12.2 Language Rules

<...>

Note that the regular expressions are matched against only a singleline of the document at a time. That means it is not possible to use apattern that matches multiple lines. The reason for this is technical:being able to restart the parser at an arbitrary line and having tore-parse only the minimal number of lines affected by an edit. In mostsituations it is possible to use the begin/end model to overcome thislimitation.


我的情况是开始/结束模型无法克服限制的少数情况之一。不幸的。

关于Sublime Text tmLanguage 文件中的正则表达式不使用多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32440333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com