我正在尝试编写一个正则表达式,提前检查以确保在我搜索的单词之后有空白字符或开括号。
此外,我希望它回顾并确保它前面有非Word(\W
)或者根本没有(即它是语句的开头)。
到目前为止,我有,
"(\\W?)(" + words.toString() + ")(\\s | \\()"
然而,这也匹配两端的东西 - 我希望这个模式只匹配单词本身 - 而不是它周围的东西。
我正在使用Java flavor Regex。
答案 0 :(得分:2)
当您自己标记问题时,需要lookarounds:
String regex = "(?<=\\W|^)(" + Pattern.quote(words.toString()) + ")(?= |[(])"
(?<=X)
表示“以X开头” (?<!=X)
表示“不前面有X” (?=X)
表示“后跟X” (?!=X)
表示“不后跟X” 答案 1 :(得分:1)
这个词本身怎么样:它总是以一个单词字符开头(即一个匹配\w
的字符)?如果是这样,您可以使用单词边界作为主要条件。
"\\b" + theWord + "(?=[\\s(])"
否则,你可以使用负面的lookbehind:
"(?<!\\w)" + theWord + "(?=[\\s(])"
我假设这个词的引用是这样的:
String theWord = Pattern.quote(words.toString());
......或者不需要。
答案 2 :(得分:0)
如果您不希望匹配捕获组,则可以使用特殊构造(?:X)
所以,在你的情况下:
"(?:\\W?)(" + words.toString() + ")(?:\\s | \\()"
您将只有两个小组,group(0)
代表整个字符串,group(1)
代表您要查找的字词。