1

我正在尝试编写一个正则表达式,以确保在我正在搜索的单词之后有一个空格字符或一个左括号。另外,我希望它回顾并确保它前面有一个非单词 ( \W) 或什么都没有(即它是语句的开头)。

到目前为止,我有,

"(\\W?)(" + words.toString() + ")(\\s | \\()"

然而,这也匹配两端的东西——我希望这个模式只匹配单词本身——而不是它周围的东西。

我正在使用 Java 风格的正则表达式。

4

3 回答 3

2

当您自己标记问题时,您需要环顾四周

String regex = "(?<=\\W|^)(" + Pattern.quote(words.toString()) + ")(?= |[(])"
  • (?<=X)意思是“前面有 X”
  • (?<!=X)表示“前面没有X”
  • (?=X)意思是“跟着 X”
  • (?!=X)表示“后面没有X”
于 2013-05-30T15:50:17.027 回答
1

单词本身呢:它总是以单词字符开头(即匹配的字符\w)吗?如果是这样,您可以使用词边界作为前导条件。

"\\b" + theWord + "(?=[\\s(])"

否则,您可以使用否定的lookbehind:

"(?<!\\w)" + theWord + "(?=[\\s(])"

我假设这个词是这样引用的:

String theWord = Pattern.quote(words.toString());

...或者不需要。

于 2013-05-30T16:55:49.363 回答
0

如果您不希望匹配捕获某个组,则可以使用特殊构造(?:X)

所以,在你的情况下:

"(?:\\W?)(" + words.toString() + ")(?:\\s | \\()"

然后,您将只有两个组,group(0)用于整个字符串和group(1)您要查找的单词。

于 2013-05-30T16:08:28.207 回答