1

下面的代码是我用来解析文件中的 href 链接的代码:

  def parseFile(){
    val source = scala.io.Source.fromFile("C:\\Users\\Adrian\\Desktop\\parsefile.txt")
    val lines = source.getLines
    val Pattern = "\\s*(?i)href\\s*=\\s*(\\\"([^\"]*\")|'[^']*'|([^'\">\\s]+))"

    for (line <- source.getLines) {
        println(line)
    line match {
        case Pattern(c) => println(c)
        case _ => None
    }
   }

    source.close ()
  }

来自 parsefile 的示例行:

  <A HREF="www.google.com" title="test">test</A>

但我收到这个 Eclipse 编译时错误:

Multiple markers at this line
    - not found: value c
    - value Pattern is not a case class constructor, nor does it have an unapply/unapplySeq method

应该如何声明 'c' 才能访问捕获组 String ?

我将上面的代码基于这个问题的公认答案:

如何在 Scala 中使用正则表达式进行模式匹配?使用的代码是:

val Pattern = "([a-cA-C])".r
word.firstLetter match {
   case Pattern(c) => c bound to capture group here
   case _ =>
}

欢迎对解析文件的替代方法提出任何建议。

4

2 回答 2

5

您的代码之间存在显着差异:

val Pattern = "\\s*(?i)href\\s*=\\s*(\\\"([^\"]*\")|'[^']*'|([^'\">\\s]+))"

和例子:

val Pattern = "([a-cA-C])".r

注意结尾.r。这会将字符串转换为正则表达式模式。regexp 模式有一个 unaplySeq 方法,因此它适用于模式匹配。

于 2013-01-16T20:52:21.233 回答
2

的类型PatternString,但应该是Regex。只需将调用添加.r到您的模式字符串。

于 2013-01-16T20:53:44.023 回答