深入淺出之正則表達式(二)
2006/11/29 22:16:06
9.      單詞邊界


元字符<<\b>>也是一種對位置進行匹配的“錨”。這種匹配是0長度匹配。

有4種位置被認為是“單詞邊界”:

1)        在字符串的第一個字符前的位置(如果字符串的第一個字符是一個“單詞字符”)

2)        在字符串的最后一個字符后的位置(如果字符串的最后一個字符是一個“單詞字符”)

3)        在一個“單詞字符”和“非單詞字符”之間,其中“非單詞字符”緊跟在“單詞字符”之后

4)        在一個“非單詞字符”和“單詞字符”之間,其中“單詞字符”緊跟在“非單詞字符”后面

“單詞字符”是可以用“\w”匹配的字符,“非單詞字符”是可以用“\W”匹配的字符。在大多數的正則表達式實現中,“單詞字符”通常包括<<[a-zA-Z0-9_]>>。

例如:<<\b4\b>>能夠匹配單個的4而不是一個更大數的一部分。這個正則表達式不會匹配“44”中的4。

換種說法,幾乎可以說<<\b>>匹配一個“字母數字序列”的開始和結束的位置。



“單詞邊界”的取反集為<<\B>>,他要匹配的位置是兩個“單詞字符”之間或者兩個“非單詞字符”之間的位置。



·        深入正則表達式引擎內部

讓我們看看把正則表達式<<\bis\b>>應用到字符串“This island is beautiful”。引擎先處理符號<<\b>>。因為\b是0長度 ,所以第一個字符T前面的位置會被考察。因為T是一個“單詞字符”,而它前面的字符是一個空字符(void),所以\b匹配了單詞邊界。接著<<i>>和第一個字符“T”匹配失敗。匹配過程繼續進行,直到第五個空格符,和第四個字符“s”之間又匹配了<<\b>>。然而空格符和<<i>>不匹配。繼續向后,到了第六個字符“i”,和第五個空格字符之間匹配了<<\b>>,然后<<is>>和第六、第七個字符都匹配了。然而第八個字符和第二個“單詞邊界”不匹配,所以匹配又失敗了。到了第13個字符i,因為和前面一個空格符形成“單詞邊界”,同時<<is>>和“is”匹配。引擎接著嘗試匹配第二個<<\b>>。因為第15個空格符和“s”形成單詞邊界,所以匹配成功。引擎“急著”返回成功匹配的結果。



10.  選擇符

正則表達式中“|”表示選擇。你可以用選擇符匹配多個可能的正則表達式中的一個。

如果你想搜索文字“cat”或“dog”,你可以用<<cat|dog>>。如果你想有更多的選擇,你只要擴展列表<<cat|dog|mouse|fish>>。

選擇符在正則表達式中具有最低的優先級,也就是說,它告訴引擎要么匹配選擇符左邊的所有表達式,要么匹配右邊的所有表達式。你也可以用圓括號來限制選擇符的作用范圍。如<<\b(cat|dog)\b>>,這樣告訴正則引擎把(cat|dog)當成一個正則表達式單位來處理。

·        注意正則引擎的“急于表功”性

正則引擎是急切的,當它找到一個有效的匹配時,它會停止搜索。因此在一定條件下,選擇符兩邊的表達式的順序對結果會有影響。假設你想用正則表達式搜索一個編程語言的函數列表:Get,GetValue,Set或SetValue。一個明顯的解決方案是<<Get|GetValue|Set|SetValue>>。讓我們看看當搜索SetValue時的結果。

因為<<Get>>和<<GetValue>>都失敗了,而<<Set>>匹配成功。因為正則導向的引擎都是“急切”的,所以它會返回第一個成功的匹配,就是“Set”,而不去繼續搜索是否有其他更好的匹配。

和我們期望的相反,正則表達式并沒有匹配整個字符串。有幾種可能的解決辦法。一是考慮到正則引擎的“急切”性,改變選項的順序,例如我們使用<<GetValue|Get|SetValue|Set>

下一頁
返回列表
返回首頁 主站蜘蛛池模板: 同城免费妇女寂寞| 国产色产综合色产在线观看视频| 久久精品国产第一区二区三区| 波多野结衣中文字幕电影| 又大又硬一进一出做视频| 香港三级欧美国产精品| 国产精品国产精品偷麻豆| 99精品在线观看| 影音先锋在线_让看片永远陪伴| 久久五月激情婷婷日韩| 樱花草视频www| 亚洲欧美不卡视频在线播放| 男同免费videos欧美| 厨房切底征服岳完整版| 萌白酱喷水视频| 日本a级视频在线播放| 亚洲va久久久噜噜噜久久天堂 | 欧美日韩在线视频| 伊人久久大香线蕉av五月天 | 天堂а√在线最新版在线8| 一级看片免费视频| 无码专区久久综合久中文字幕| 久久精品人人做人人爽电影蜜月| 欧美一区二区久久精品| 亚洲日韩第一页| 毛片a级三毛片免费播放| 国产在线精品一区二区不卡| 在线观看你懂得| 国模吧双双大尺度炮交gogo| gav男人天堂| 姚瑶小说穿越到古代免费阅读下载| 中文字幕日韩在线| 日本xxxx18护士| 久久免费区一区二区三波多野| 最近更新中文字幕第一电影| 免费人成网站在线观看不卡| 精品欧美一区二区三区在线| 啊灬啊灬啊灬岳| 九九视频在线观看6| 国产精品久久自在自线观看 | 日韩精品中文字幕无码专区|