当单词后面没有连字符、下划线和字母数字时如何捕获它

How to capture a word when it's not followed by hyphens, underscores, and alphanumeric

如果单词 "entity" 后面没有连字符、下划线和字母数字,并且忽略其后的任何其他内容,我该如何捕获它?

比如我想在以下几种情况下抓取"entity"这个词:

但我不希望它在以下情况下捕获单词:

我最远的是:

(entity)[^-$a-zA-Z_0-9]

但是,上面的正则表达式标识:

我正在尝试在 Sublime Syntax 定义中捕获此标记。

听起来像是 lookaheads 的工作!

像这样的东西应该可以工作:

(entity)(?=[\s,\]])

解释:

  • (?<=\[)?(?<=regex) 构造是一个回顾。我们通过使用尾随 ? 使其成为可选的。这个 lookbehind 在我们的正则表达式
  • 前面寻找 [ 字符
  • (entity):匹配短语entity并捕获它
  • (?=[\s,\]]):向前看 ((?=regex)),查找 \s,] 中的任何一个。 \s 在 RegEx 中匹配一个空白字符,包括空格、制表符、换行符等

我的模式的一个警告是短语 entity] 将被匹配,没有前导 [,这在您的示例中没有指定。这可能是 expanded further,但它会开始变得混乱,而且可能没有必要,无论如何。

对于 OP 和规则 "when it's not followed by hyphens, underscores, and alphanumeric" 发布的示例,也可以使用 negative lookaheads:

entity(?![0-9a-zA-Z_-])

实质上匹配 entity 只要它是 而不是 后跟数字、字母数字、_(下划线)或 -(连字符)。

See Regex Demo