Scala正则表达式,如何修复

时间:2017-11-14 16:36:51

标签: regex scala

这是我的代码:

object test extends App {

  private val PLAYER_REGEX = """[\s\S]*(?:<td class="align-middle plus-size"> <s class="text-muted">|<td class="align-middle plus-size">)(.*)(?:</s> </td></tr>|</td></tr>)""".r
  val str ="""<td class="align-middle plus-size"> <s class="text-muted">first</s> </td></tr>"""
  val str2 ="""<td class="align-middle plus-size">second</td></tr>"""

  private def find(str:String) = {
    PLAYER_REGEX.findFirstMatchIn(str) match {
      case Some(data) => data.group(1).trim
      case None => "Not found"
    }
  }
  println(find(str))
  println(find(str2))
}

输出

first</s>
second

我的问题是 - 为什么那些多余的

</s> 

在第一种情况下?我以为

(?:</s> </td></tr>|</td></tr>)  

应选择首次出现

</s> </td></tr> 

但看起来像是选择

</td></tr>???

当然我可以修剪它,但它看起来很难看。 如果你能提供另一个正则表达式,我也会很高兴:)

1 个答案:

答案 0 :(得分:0)

事先由这个贪婪的量词引起:

…(.*)…

相反,请使用懒惰版本:

…(.*?)…