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

时间:2017-05-25 20:31:05

标签: java regex skip

我一直试图为Java提供一个正则表达式来匹配机器人命令:

!x play search words here

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

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

但是如果我想使用别名“p”代表“play”,那么正则表达式也会跳过“p”。我也一直试图让跳过的匹配与感叹号一起使用而没有成功。

我找到的一个解决方法是使用:

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

然后第一场比赛是空白的“p”。我只是想不通数!

1 个答案:

答案 0 :(得分:2)

为避免匹配前面带有!的字词,您可以使用

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

请参阅regex demo

<强>详情:

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

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