在 TextMate 中反转正则表达式匹配

在 TextMate 中反转正则表达式匹配

我有这个字符串:

goose goose goose random goose goose test goose goose goose

我在 TextMate 中使用正则表达式来查找任何不是goose. 因此random和 的单词test

所以我尝试了这个正则表达式:

[^\sgoose\s]

但这并没有完全满足我的要求。它匹配任何不是 aspace或 字母 的字符g o s e

我如何才能找到正则表达式来匹配任何不完整的单词goose?因此,应该有 2 个匹配项randomtest

答案1

不确定它是否适用于 TextMate(我没有它,但我已经用 Notepad++ 测试过)。

您可以尝试:

\b(?:(?!goose)\w)+\b

解释:

\b          : word boundary
(?:         : start non capture group
  (?!goose) : negative lookahead, make sure we don't have the word "goose"
  \w        : a word character, you may use "[a-zA-Z]" for letters only or "." for any character but newline
)+          : group may appears 1 or more times
\b          : word boundary

答案2

我发现这个表达有错误,你可以在这里检查:https://regex101.com/r/XQhqAB/1

如您所见,上面的表达式\b(?:(?!goose)\w)+\b找不到:gooses1goose1以及所有以前缀开头的单词goose。显然这些是其他单词...

正确表达(针对扩展词):(?<=^|\s)(?!goose(?:\s|$))\S+(?=\s|$)
你在这里测试一下:https://regex101.com/r/XQhqAB/4

正确表达(针对简单的单词):\b(?!goose\b)\w+\b
测试一下:https://regex101.com/r/XQhqAB/5

真挚地。

相关内容