Java REGEX运算符优先级

时间:2012-02-20 06:14:40

标签: java regex

我有几个字符串:

john doe happy
george smith is happy

这是我的正则表达式:

([a-zA-Z ]+) (is happy|happy)

我需要第1组总是像“john doe”或“george smith”这样的名字

我需要第2组永远是“快乐”或“快乐”

现在,“乔治·史密斯很高兴”总是与“乔治史密斯是”和“快乐”相匹配......当我真的希望它是“乔治史密斯”和“快乐”时

如何让“快乐”优先于“快乐”?

1 个答案:

答案 0 :(得分:3)

+是贪婪的,这意味着它会匹配尽可能多的字符,因此您永远不会将is happy与正则表达式匹配。您可以将其更改为惰性匹配,方法是将其更改为+?,其匹配尽可能少的字符(仍然是一个或多个):

([a-zA-Z ]+?) (is happy|happy)