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

キャプチャ グループ String にアクセスするには、「c」をどのように宣言する必要がありますか?

上記のコードは、この質問から受け入れられた回答に基づいています:

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

のタイプはPatternですがString、 である必要がありますRegex.rパターン文字列に呼び出しを追加するだけです。

于 2013-01-16T20:53:44.023 に答える