斷言
正則表達式中的大多數結構匹配的文本會出現在最終的匹配結果中(一般用group(0)可以得到),但是也有些結構並不是真正匹配文本,而只負責判斷在某個位置左/右側的文本是否符合要求,這種結構被稱為斷言(assertion)。常見的斷言有三類:單詞邊界、行起始/結束位置、環視。
在文本處理中經常可能進行單詞替換,比如吧一段文本中的 row 都替換成 line 。一般想到的是調用字符串的替換方法,直接替換row。 在不同語言中這些方法給不相同,但差別不大。
替換前:The row we are looking for is row 10.
替換后:The line we are looking for is line 10.
不過,這樣替換也可能會造成意想不到的后果。
替換前:...tomorrow I will wear in brown standing in row 10 next to the rowdy guy...
替換后:...tomorline I will wear in blinen standing in line 10 next to the linedy guy...
不僅所有單詞 row 都被替換成了 line,其他單詞內部的 row 也被替換成了 line,這顯然不是我們想要的結果。
要解決這個問題,必須有辦法確定單詞 row,而不是字符串 row。為解決這類問題,正則表達式提供了專用的單詞邊界(world boundary),記為\b。它匹配的是“單詞邊界”位置,而不是字符。也就是說,\b能夠匹配這樣的位置:一邊是單詞字符,另一邊不是單詞字。