我试图在匹配模式之前捕获单词。我的搜索词是“ ale”。我必须在ale之前先说一句话

输入项

"Golden pale ale by @KonaBrewingCo @ Hold Fast Bar",


我只想要Golden pale个字。只是为了获得匹配模式之前的单词。

String pattern = "\w+\s" + "ale";
Pattern regex = Pattern.compile(pattern);
Matcher m = regex.matcher(stat);
if(m.find()){ Do something }


但这向我显示了Java错误。任何人都请帮助!!!

最佳答案

如果您的搜索字符串应作为另一个单词的一部分出现,则需要在\w*之前添加ale

String keyword = "ale";
String rx = "\\w+\\s+\\w*" + keyword;
Pattern p = Pattern.compile(rx);
Matcher matcher = p.matcher("Golden pale ale by @KonaBrewingCo @ Hold Fast Bar");
if (matcher.find()) {
    System.out.println(matcher.group(0)); // => Golden pale
}


IDEONE demo

模式说明:


\w+-1个或多个字母数字或下划线字符
\s+-1+空格(\W+将匹配偶数标点和其他非单词字符)
\\w*-零个或多个单词字符(在...之前的可选部分。
ale-文字字符序列。

07-27 21:02