如何用正则表达式匹配和排除“!x”?

How to match and exclude "!x" with regex?

我一直在尝试为 Java 想出一个正则表达式来匹配机器人命令:

!x play search words here

其中 x 可以是任何字母数字字符并且适用于:

"(?:\w)(\w+)"

但是,如果我想对 "play" 使用别名 "p",正则表达式也会跳过 "p"。我也一直在尝试让跳过匹配与感叹号一起使用但没有成功。

我发现的一个解决方法是使用:

"[^\!\w]+(\w+)"

但是第一个匹配项是带空格的“p”。我就是想不通!

要避免匹配以 ! 开头的单词,您可以使用

"\b(?<!!)\w+"

regex demo

详情:

  • \b - 单词边界
  • (?<!!) - negative lookbehind 确保在当前位置
  • 之前不能有 !
  • \w+ - 1 个或多个单词字符。

请注意,lookbehinds 是零宽度断言,它们只是向正则表达式引擎发出继续匹配还是停止匹配的信号(匹配的文本不会添加到当前匹配的文本中)。