如何匹配第一组出现与正则表达式?

时间:2017-03-02 11:43:58

标签: java regex

示例:https://regex101.com/r/n4x91E/1

INPUT STRING:

"我认为我们必须向某个人指出某些事情,在此之后还要向他提出其他一些事情"

MY REGULAR EXPRESSION:

(point).*(out)

返回错误结果:

"我认为我们也必须point certain things out to this man, and after that point some other things out和#34;

预期结果:

"我想我们必须point certain things out给这个男人,并且在那之后还有其他一些东西给他#34;

如何更改我的正则表达式以获取第一组?

3 个答案:

答案 0 :(得分:6)

您可以在正则表达式中使用延迟量词,如此版本:

https://regex101.com/r/n4x91E/2

(point).*?(out)

Java documentation这个量词被称为不情愿,但我认为懒惰更常用...

答案 1 :(得分:1)

你可以试试这个:

(point).*?(out)

如果您只想要第一次出现,那么不要使用全局标志......它只匹配第一次出现。请参阅以下链接。否则你可以把全球旗帜' g'

Explanation

答案 2 :(得分:1)

让正则表达式非贪婪:

(point.*?out)

示例代码:

String line = "I think we have to point certain things out to this man, and after that point some other things out to him as well";
String pattern = ".*(point.*?out).*";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(line);
if (m.find()) {
    System.out.println(m.group(1));
    System.out.println(m.group(2));
}

<强>输出:

point certain things out
point some other things out