2014-12-07 120 views
1

我有以下代碼:如何使用正則表達式匹配整個字符串

def main(args: Array[String]) { 
     val it = ("\\b" + "'as" + "\\b").r.findAllMatchIn("'as you are a's".toLowerCase()); 
     val lst = it.map(_.start).toList 
     print(lst) 
} 

我希望答案是List(0)(因爲它匹配'as和指標應0),但它給了我List()

此外,

def main(args: Array[String]) { 
     val it = ("\\b" + "as" + "\\b").r.findAllMatchIn("'as you are a's".toLowerCase()); 
     val lst = it.map(_.start).toList 
     print(lst) 
    } 

這給我的回答List(1)但我預計一nswer是List(),因爲我想匹配整個事情(需要精確匹配'as),這就是爲什麼我用\b這裏

但它運行良好:

def main(args: Array[String]) { 
     val it = ("\\b" + "a's" + "\\b").r.findAllMatchIn("'as you are a's".toLowerCase()); 
     val lst = it.map(_.start).toList 
     print(lst) 
    } 

它返回List(12)這就是我想要的(因爲它匹配a's和索引應該是12)。

我不明白爲什麼它不起作用,當我把'放在字的前面。我怎樣才能做到這一點?

回答

1

如果之後的第一個字符不是字母或其他單詞字符,則問題是\b不匹配。所以當它跟着'時它不匹配。請參閱:http://www.regular-expressions.info/wordboundaries.html

編輯:

val it = ("(?:\\b|')" + "as" + "\\b").r.findAllMatchIn("'as you are a's".toLowerCase()) 
+0

@yeah,所以我怎麼整字符串匹配? – CSnerd 2014-12-07 18:10:06

+0

無論如何,您並不期望與整個字符串匹配......只要可能,只有「as」。從正面刪除'\\ b'。 – 2014-12-07 18:12:18

+0

一個簡單的例子,用'(?:\ b |')'預先檢查:http://fiddle.re/ta2bn6 – 2014-12-07 19:08:24