Java - 正则表达式匹配多个单词

时间:2014-05-30 19:00:29

标签: java regex

我是Java和Regex的初学者,这是我第一次使用堆栈溢出。 我想知道你是否可以使用正则表达式执行以下操作。

例如,假设您要将字符串与以下正则表达式匹配: “。什么时候(\ w +)。” - 我试图在“什么时候”之后得到这个事件

我可以使用matcher.group(index)获取事件,但如果事件就像退伍军人节那样,这不起作用,因为它是两个单词。我只能在“什么时候”之后得到第一个字 我应该使用什么正则表达式来获取'when is'之后的所有单词

非常感谢您的时间和帮助!


首先,感谢所有人的帮助 还有第二个问题.. 让我们说我想抓住某人的bday 喜欢'什么时候是*生日 如何使用正则表达式捕获is和birthday之间的所有文本?

5 个答案:

答案 0 :(得分:4)

你可以试试这个:

^when is (.*)$

这将找到一个以when is开头的字符串,并将所有其他内容捕获到该行的末尾。

正则表达式将返回一个组。您可以像这样访问它:

String line = "when is Veteran's Day.";
Pattern pattern = Pattern.compile("^when is (.*)$");
Matcher matcher = pattern.matcher(line);
while (matcher.find()) {
    System.out.println("group 1: " + matcher.group(1));
    System.out.println("group 2: " + matcher.group(2));
}

输出应为:

group 1: when is Veteran's Day.
group 2: Veteran's Day.

答案 1 :(得分:2)

如果要允许匹配空格,则应明确允许空格。

([\w\s]+)

但是,如果您想在when is之后捕获所有内容,roydukkey的解决方案将会有效。

答案 2 :(得分:0)

您可以将其表达为字符类,并在其中包含空格:when is ([\w ]+)

答案 3 :(得分:0)

\w仅包含单词字符,不包含空格。请改用[\w ]+

答案 4 :(得分:0)

当你不需要时,不要使用正则表达式!!虽然正则表达式的理论很漂亮,你可以让字符串为你做代码操作,但对于简单的用例来说,它的内存效率非常低。

如果你试图在“什么时候”以空格结尾后得到这个词,你可以这样做:

String start = "when is ";
String end = " ";
int startLocation = fullString.indexOf(start) + start.length();
String afterStart = fullString.substring(startLocation, fullString.length());
String word = afterStart.substring(0, afterStart.indexOf(end));

如果您知道最后一个单词是Day,您可以只使end =“Day”并添加该字符串的长度以结束第二个子字符串。