2013-01-19 45 views

回答

4

回溯爲狀態機備份和重試的其它匹配正則表達式的方法。這是幾乎內部到正則表達式引擎。

例如,假設你試圖匹配正則表達式[a-z]*a,任意數量的小寫字符後跟a

鑑於輸入abca,貪婪的匹配將全部分配給正則表達式的[a-z]部分,但是無法匹配最終的a。回溯允許引擎備份返回最後a到輸入流並再次嘗試,將abc分配給[a-z]部分和aa部分。在另一方面


回到引用,是用於正則表達式引擎來引用先前捕獲基團的用戶的裝置。例如,

s/^([a-z])([a-z])/\1_\2/ 
    \_____/\_____/ 
    |  | 
    |  +- capture group 2 
    +-------- capture group 1 

可以是命令在每個行的開始插入_兩者之間連續小寫字母。 \N反向參照(其中N代表一個數字)是指回到在()內捕獲的組。

+1

不是反向引用而是在模式本身內引用先前匹配的字符串,例如'([A-Z])\ 1'? – Gumbo

+0

在搜索和替換部分中是否允許反向引用取決於正則表達式引擎本身(一些較老的甚至根本不允許反向引用)。在任何情況下,這個概念都是一樣的,這是一種重新引用先前捕獲的組的方式。 – paxdiablo

+0

@paxdiablo'+ 1'給你!這個概念現在對我來說已經100%清楚了。只是問我的第二個問題是否真的有效?是否存在'backtracking'失敗,'back-referencing'勝過它,反之亦然? –

相關問題