2013-01-16 57 views
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」,以訪問捕獲組海峽聲明ing?

我上面的基礎上的代碼接受的答案來自這個問題:

How to pattern match using regular expression in Scala?其中使用的代碼是:

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

上可供選擇的方法有什麼建議來解析文件的歡迎。

回答

5

還有就是你的代碼之間有明顯的差異:與例子

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

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

注結束.r。這將字符串轉換爲正則表達式模式。正則表達式模式有一個unaplySeq方法,因此它可以與模式匹配一​​起使用。

2

Pattern的類型是String,但應該是Regex。只需將.r添加到您的模式字符串即可。