在 Sublime 中,如何使用 Grep 查找少于 4 个字符的单词?
四处搜寻后,我发现这个答案关于如何使用 Grep 查找少于 4 个字符的单词。它要求输入以下内容:
egrep -x '.{1,3}'
但这在 Sublime 中似乎不起作用。即使我删除了 egrep 和 -x 前缀,它也不起作用。
是否有技巧可以使 Grep 命令适应 Sublime 中的工作?
答案1
关于 Sublime Text 3 RegExp 引擎
Sublime Text 使用专有的正则表达式引擎,除非正则表达式使用它不支持的构造,否则将使用 Oniguruma。
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 中实际执行的操作:
变体
由于它可能不是你要找的,所以我看到了一些变体,以防你的文本有单词之间用换行符分隔。
^.{1,3}
为了匹配每个单词的开头,如果该单词至少有 3 个字符。
例子:
ONE
TO
TWO
THREE
将匹配:ONE
,,TWO
THR
.{1,3}$
为了匹配每个单词的结尾,如果该单词至少有 3 个字符。
例子:
ONE
TO
TWO
THREE
将匹配:ONE
,,TWO
REE
^.{1,3}$
匹配每个包含 1 到 3 个字符的单词。
例子:
ONE
TO
TWO
THREE
将匹配:ONE
,,TO
TWO