正则表达式问题,可能与贪心比赛有关

时间:2014-07-24 08:10:10

标签: regex scala

val a="""\s*(abc)?.*(xyz)?""".r
val a(x,y)="   abcxyz"

我希望y是xyz,但实际上它是null,我怎么能提取xyz?它是可选的,但如果它在那里,那么我想提取它。

scala> val a="""\s*(abc)?.*(xyz)?""".r
a: scala.util.matching.Regex = \s*(abc)?.*(xyz)?

scala> val a(x,y)="   abcxyz"
x: String = abc
y: String = null

1 个答案:

答案 0 :(得分:2)

问题是“。*”。

在到达“(xyz)”之前消耗整场比赛。

你可以添加“?”为了使比赛不贪婪“。*?”。

到Kleene-Star
val a="""\s*(abc)?.*?(xyz)?""".r
//a: scala.util.matching.Regex = \s*(abc)?.*?(xyz)?

val a(x,y)="   abcxyz"
//x: String = abc
//y: String = xyz