這個問題是舊的,但也不是特別清楚:你不解釋你如何試圖使用正則表達式。無論如何,我會試着回答它。
首先,在Perl或Ruby中沒有「特殊」變量$1
或$2
。隨着這一點,如何使用各種程序變得簡單。
例如,string-match
,你只是收到一個匹配的列表:
#;1> (use regex regex-literals)
#;2> (string-match #/b(a)(r)/ "bar")
("bar" "a" "r")
因此,指第N子匹配你會用(list-ref the-match N)
(其中0等於完全匹配的字符串)。
隨着string-substitute
和正則表達式中使用反向引用的時候,你會使用"\\1"
(你必須使用兩個反斜線逃避串上下文中的反斜槓):
#;1> (use regex regex-literal)
#;2> (string-substitute #/f(o)(\1)/ "lala\\2xyz" "foo")
"lalaoxyz"
這工作一般,但有一個沒有記錄的特性(或者一個bug),如果你在替換中的轉義序列前面使用反斜線,它將被轉義。請參閱this bugreport關於如何工作,以及如何使用irregex而不是正則表達式來避免這種情況。