关于 Sublime Text 3 RegExp 引擎

关于 Sublime Text 3 RegExp 引擎

在 Sublime 中,如何使用 Grep 查找少于 4 个字符的单词?

四处搜寻后,我发现这个答案关于如何使用 Grep 查找少于 4 个字符的单词。它要求输入以下内容:

egrep -x '.{1,3}'

但这在 Sublime 中似乎不起作用。即使我删除了 egrep 和 -x 前缀,它也不起作用。

是否有技巧可以使 Grep 命令适应 Sublime 中的工作?

答案1

关于 Sublime Text 3 RegExp 引擎

Sublime Text 使用专有的正则表达式引擎,除非正则表达式使用它不支持的构造,否则将使用 Oniguruma。

作者在 Sublime Text 论坛上撰写了这篇文章

Sublime Text build 3085 及更新版本包含一个自定义的非回溯正则表达式引擎,仅用于语法高亮。它针对对源文件进行词法分析时发生的匹配类型进行了大量优化。

它不是开源的,并且不包含 Oniguruma 中的一些功能,因为它是一种不同风格的引擎。只要有可能,Sublime Text 正则表达式引擎就会用于 .sublime-syntax 或 .tmLanguage 文件中的正则表达式模式。如果正则表达式使用新引擎不支持的构造,则会改用 Oniguruma。我们目前没有删除 Oniguruma 引擎的计划,因此所有现有的 .tmLanguage 文件将继续受支持。

关于.{1,3}

.{1,3}火柴任意字符串HELLO包含 1 到 3 个字符。这意味着它将匹配单词中HEL的 和LO

这是.{1,3}在 ST3 中实际执行的操作:

Sublime Text 3 正则表达式

变体

由于它可能不是你要找的,所以我看到了一些变体,以防你的文本有单词之间用换行符分隔。

^.{1,3}

为了匹配每个单词的开头,如果该单词至少有 3 个字符。

例子:

ONE
TO
TWO
THREE

将匹配:ONE,,TWOTHR

.{1,3}$

为了匹配每个单词的结尾,如果该单词至少有 3 个字符。

例子:

ONE
TO
TWO
THREE

将匹配:ONE,,TWOREE

^.{1,3}$

匹配每个包含 1 到 3 个字符的单词

例子:

ONE
TO
TWO
THREE

将匹配:ONE,,TOTWO

相关内容