天天看點

《正規表達式經典執行個體(第2版)》——2.22 把比對上下文插入到替代文本中

本節書摘來自異步社群《正規表達式經典執行個體(第2版)》一書中的第2章,第2.22節,作者: 【美】jan goyvaerts , steven levithan著,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

問題描述

建立一個替代文本,用來把正規表達式比對的文本替換為比對之前的文本緊跟完整目标文本再緊跟比對之後的文本。例如,如果在beforematchafter中找到的是match,那麼把這個比對換成beforebeforematchafterafter,最終得到的新文本是beforebefore beforematchafterafterafter。

解決方案

讨論

上下文(context)這個術語,指的是正規表達式所應用于的目标文本。總共存在3種上下文:正則比對之前的目标文本、正則比對之後的目标文本以及整個目标文本。在比對之前的文本有時候被稱作左上下文(left context),而比對之後的文本則相應地被稱作右上下文(right context)。整個目标文本則是左上下文、比對再加右上下文。

.net和perl支援使用

《正規表達式經典執行個體(第2版)》——2.22 把比對上下文插入到替代文本中

和«$_»來把所有3種形式的上下文插入到替代文本中。事實上,在perl中每次成功的正則比對之後都會指派給這些變量,并且可以在任何代碼中使用,直到遇到下一次比對嘗試。“美元符号+反引号”對應左上下文。在标準美式鍵盤上,你可以按鍵盤左上角1鍵左邊的鍵來輸入反引号。“美元符号+垂直引号”對應右上下文。垂直引号也就是通常的單引号。在标準美式鍵盤上,它位于分号和Enter鍵(enter)之間。“美元符号+下劃線”是整個目标文本。與.net和perl類似,javascript也使用« $` »和« $' »來代表左、右上下文。然而,javascript并沒有提供單個記号用于插入整個目标文本。你可以自己重構目标文本,把整個正則比對通過« $& »添加到左、右上下文之間即可。

ruby通過«`»和«'»支援左、右上下文,并且使用«&»來插入整個正則比對。與javascript一樣,ruby中也不存在插入整個目标文本的記号。

繼續閱讀