《正則表達式經典實例(第2版)》——2.20 在替代文本中添加正則匹配
本節書摘來自異步社區《正則表達式經典實例(第2版)》一書中的第2章,第2.20節,作者: 【美】Jan Goyvaerts , Steven Levithan著,更多章節內容可以訪問雲棲社區“異步社區”公眾號查看
2.20 在替代文本中添加正則匹配
問題描述
執行查找和替換,把所有URL都轉換成指向該URL的HTML鏈接,並使用該URL作為鏈接的文本。在這個練習中,把URL定義為“http:”以及其後所有的非空字符。例如,Please visit應該被轉換為Please visit。
解決方案
正則表達式
http:\S+
正則選項:無
正則流派:.NET、Java、JavaScript、PCRE、Perl、Python、Ruby
替代文本
<a●href="$&">$&</a>
替代文本流派:.NET、JavaScript、Perl
<a●href="$0">$0</a>
替代文本流派:.NET、Java、XRegExp、PHP
<a●href="\0">\0</a>
替代文本流派:PHP、Ruby
<a●href="\&">\&</a>
替代文本流派:Ruby
<a●href="\g<0>">\g<0></a>
替代文本流派:Python
討論
把整個正則匹配重新插回到替代文本中,是在匹配文本之前、之後或者兩邊,甚至是在匹配文本的多個副本之間插入新文本的一種比較容易的方式。除Python之外,你都不必在正則表達式中添加任何捕獲分組,就能夠在替換中使用整個匹配結果。
在Perl中,«$&»實際上是一個變量。在每次正則表達式匹配成功之後,Perl都會把完整正則匹配保存到這個變量中。在正則式中使用«$&»會帶來性能損失,所以你可能更傾向使用捕獲分組包裹整個正則式,以及指向該分組的反向引用。
.NET和JavaScript沿用了«$&»的語法來把正則匹配插入到替代文本中。Ruby使用反斜杠而不是美元符號作為替代文本中的記號,因此會使用«&»來指代整個匹配。
Java、PHP和Python中並不存在一個特殊記號來重新插入整個正則匹配,但是它們也允許把捕獲分組匹配到的文本插入到替代文本中,這會在下一小節中進行講解。整個匹配則是一個編號為0的隱式捕獲分組。對於Python來說,我們需要使用命名捕獲的語法以引用0號分組。在Python中並不支持«\0»。
.NET、XRegExp和Ruby也支持第0個捕獲分組的語法,但是使用哪種語法並不重要。因為結果都是一樣的。
最後更新:2017-06-02 19:35:58