如何用正则表达式匹配和排除“!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+"
详情:
\b
- 单词边界
(?<!!)
- negative lookbehind 确保在当前位置 之前不能有 !
\w+
- 1 个或多个单词字符。
请注意,lookbehinds 是零宽度断言,它们只是向正则表达式引擎发出继续匹配还是停止匹配的信号(匹配的文本不会添加到当前匹配的文本中)。
我一直在尝试为 Java 想出一个正则表达式来匹配机器人命令:
!x play search words here
其中 x 可以是任何字母数字字符并且适用于:
"(?:\w)(\w+)"
但是,如果我想对 "play" 使用别名 "p",正则表达式也会跳过 "p"。我也一直在尝试让跳过匹配与感叹号一起使用但没有成功。
我发现的一个解决方法是使用:
"[^\!\w]+(\w+)"
但是第一个匹配项是带空格的“p”。我就是想不通!
要避免匹配以 !
开头的单词,您可以使用
"\b(?<!!)\w+"
详情:
\b
- 单词边界(?<!!)
- negative lookbehind 确保在当前位置 之前不能有 \w+
- 1 个或多个单词字符。
!
请注意,lookbehinds 是零宽度断言,它们只是向正则表达式引擎发出继续匹配还是停止匹配的信号(匹配的文本不会添加到当前匹配的文本中)。