java - 正则表达式在Java中捕获匹配模式之前的单词

标签 java regex

我尝试在匹配模式之前捕获单词。我的搜索词是“啤酒”。我必须在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 中的错误。请大家帮忙!!!

最佳答案

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

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 - 文字字符序列。

关于java - 正则表达式在Java中捕获匹配模式之前的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38229593/

相关文章:

regex - 如何在 Vim 中只替换全字匹配?

JavaScript 正则表达式 : get all numbers having between 2 and 6 digits but not 5

javascript - JavaScript 中的正则表达式怪异

ruby - ruby 中用于具有多种模式的字符串的正则表达式

java - Mockito - InvalidUseOfMatchersException

java - jaxb xjc 编译错误 Super Interface not found In jaxb generated class path

java - Python 的 urllib2.urlopen() 挂起与 Java ReSTLet 服务器的本地连接

PHP:使用 preg_match() 匹配奇怪的破折号

java - 有没有办法将原始类型与其相应的包装类型进行比较?

java - 从内部 AsyncTask 类获取 Arraylist