2012-11-09 20 views
1

我試圖匹配[]。 但是當我們也使用這兩個正則表達式時, 如何編寫一些模式來匹配兩個括號? 使用\[不起作用,因爲它給了編譯器錯誤以下行:如何匹配Regex Scala中的方括號?

regex(new Regex("([^.#; \\t\\r\n(){}\[\]',`\"][^; \\t\\r\\n(){}\[\]',`\"]*|[.][^; \\t\\r\\n(){}\[\]',`\"]+)")) 
+1

嗯..好像是使用雙反斜線工作的正則表達式將做工精細.... – monica

+7

兩個小技巧 - 首先,考慮使用三重引號的字符串,所以你不需要逃避反斜槓;其次,你可以在一個字符串上調用.r來將它轉換爲正則表達式。把它們放在一起,你可以這樣做:val MajorMinor:Regex =「」「(\ d +)\。(\ d +)」「」。r – mpilquist

+0

@mpilquist你爲什麼不把它作爲回答發佈? –

回答

3

我與

"""\[[^\]]+\]""".r 

的正則表達式去。

"""\[[^\]]+\]""".r findAllIn """[a], [b], [123 Hello]""" toList 
res2: List[String] = List([a], [b], [123 Hello]) 

只要你不會需要解析嵌套表達式爲

"""\[[^\]]+\]""".r findAllIn """[[a], [b]]""" toList 
res4: List[String] = List([[a], [b]) 
1
val Bracketed = """\[.*?\]""".r 

def check(s: String) = 
    (Bracketed findAllIn s).toSeq 

check("Wrong (curved) thingies") // Nil 
check("") // Nil 
check("[Hi]") // [Hi] 
check("[Hi][There]") // [Hi], [There] 
check("[Hi]gap[There]gop") // [Hi], [There]