我正在尝试编写一个正则表达式,以确保在我正在搜索的单词之后有一个空格字符或一个左括号。另外,我希望它回顾并确保它前面有一个非单词 ( \W
) 或什么都没有(即它是语句的开头)。
到目前为止,我有,
"(\\W?)(" + words.toString() + ")(\\s | \\()"
然而,这也匹配两端的东西——我希望这个模式只匹配单词本身——而不是它周围的东西。
我正在使用 Java 风格的正则表达式。
我正在尝试编写一个正则表达式,以确保在我正在搜索的单词之后有一个空格字符或一个左括号。另外,我希望它回顾并确保它前面有一个非单词 ( \W
) 或什么都没有(即它是语句的开头)。
到目前为止,我有,
"(\\W?)(" + words.toString() + ")(\\s | \\()"
然而,这也匹配两端的东西——我希望这个模式只匹配单词本身——而不是它周围的东西。
我正在使用 Java 风格的正则表达式。
当您自己标记问题时,您需要环顾四周:
String regex = "(?<=\\W|^)(" + Pattern.quote(words.toString()) + ")(?= |[(])"
(?<=X)
意思是“前面有 X”(?<!=X)
表示“前面没有X”(?=X)
意思是“跟着 X”(?!=X)
表示“后面没有X”单词本身呢:它总是以单词字符开头(即匹配的字符\w
)吗?如果是这样,您可以使用词边界作为前导条件。
"\\b" + theWord + "(?=[\\s(])"
否则,您可以使用否定的lookbehind:
"(?<!\\w)" + theWord + "(?=[\\s(])"
我假设这个词是这样引用的:
String theWord = Pattern.quote(words.toString());
...或者不需要。
如果您不希望匹配捕获某个组,则可以使用特殊构造(?:X)
所以,在你的情况下:
"(?:\\W?)(" + words.toString() + ")(?:\\s | \\()"
然后,您将只有两个组,group(0)
用于整个字符串和group(1)
您要查找的单词。