我一直试图为Java提供一个正则表达式来匹配机器人命令:
!x play search words here
其中x可以是任何字母数字字符,它适用于:
"(?:\\w)(\\w+)"
但是如果我想使用别名“p”代表“play”,那么正则表达式也会跳过“p”。我也一直试图让跳过的匹配与感叹号一起使用而没有成功。
我找到的一个解决方法是使用:
"[^\\!\\w]+(\\w+)"
然后第一场比赛是空白的“p”。我只是想不通数!
答案 0 :(得分:2)
为避免匹配前面带有!
的字词,您可以使用
"\\b(?<!!)\\w+"
请参阅regex demo
<强>详情:
\b
- 字边界(?<!!)
- negative lookbehind确保在当前位置之前无法!
\w+
- 一个或多个单词字符。请注意,lookbehinds是零宽度断言,它们只是表示正则表达式引擎是继续匹配还是停止(匹配的文本不会添加到当前匹配的文本中)。