Java-Regex匹配多个单词

Java-Regex匹配多个单词,java,regex,Java,Regex,假设要将字符串与以下正则表达式匹配: “.when is(\w+)”-我正在尝试在“when is”之后获取事件 我可以通过matcher.group(索引)获得该活动,但如果该活动像退伍军人节一样,则该活动无效,因为它是两个单词。我只能得到“when is”之后的第一个单词 我应该使用什么正则表达式来获取“when is”之后的所有单词 还有,假设我想抓到像这样的人 生日是什么时候 如何使用正则表达式捕获从is到birthday之间的所有文本?您可以将其表示为字符类并在其中包含空格:当is(

假设要将字符串与以下正则表达式匹配: “.when is(\w+)”-我正在尝试在“when is”之后获取事件

我可以通过matcher.group(索引)获得该活动,但如果该活动像退伍军人节一样,则该活动无效,因为它是两个单词。我只能得到“when is”之后的第一个单词

我应该使用什么正则表达式来获取“when is”之后的所有单词


还有,假设我想抓到像这样的人

生日是什么时候


如何使用正则表达式捕获从is到birthday之间的所有文本?

您可以将其表示为字符类并在其中包含空格:
当is([\w]+)
您可以尝试以下操作:

^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.

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

如果要允许匹配空白,应显式允许空白

([\w\s]+)

但是,如果您想在is时捕获
之后的所有内容,那么roydukkey的解决方案将起作用。如果您不需要,请不要使用正则表达式!!尽管正则表达式的理论非常美妙,因为它可以让字符串为您执行代码操作,但对于简单的用例来说,它的内存效率非常低

如果你想在“when is”后面加一个空格,你可以这样做:

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”加上第二个子字符串的长度。

\w
不包含空格或引号。
\w
===
对不起,当你写
\w
时,我实际上是指(\\w+)而不是(\w+@user3692525),我们假设您指的是正则表达式
\w
,它在Java字符串语法中表示为
\\w
。同样,我们在同样的假设下编写答案。感谢您的快速回答!我只有一个小问题。我怎样才能得到你的正则表达式的所有组?非常感谢Hanks Roydukey!最后一个帮助--很抱歉打扰你。。。假设我想捕捉某人的生日,比如“when is*Birth”,如何使用regex捕捉从is到Birth之间的所有文本?您可以在when is(.*)Birth
时尝试此
。似乎您是regex新手。这里是一个伟大的来源!我同意。实际上我以前总是这么做,而且对这么多代码感到厌烦。我认为正则表达式意味着更少的行数,更容易满足我当前的需求。这实际上取决于你如何使用正则表达式以及你的程序的需求。您可以考虑执行的频率、受众和各种其他因素。Regex是我最喜欢的脚本之一,但它们有时是效率的祸根。我刚刚看到一家公司重做了一个使用perl正则表达式完成的整个项目,并将其切换到各种java解析技术,因为perl远远落后于同时执行正则表达式的线程。如果问题是识别一个类似的文本字符串,或者它是一个必须被识别的模式,那么这实际上只是找到这行代码的问题。