互動式編寫Regex
比如buffer中有一個字串
abcd 3
運行命令:
M-x:re-builder
會出現一個小buffer,在雙引號裡面輸入Regexd ,上面有字串的buffer馬上高亮d字元,如果輸入3,則高亮3字元。
特殊字元
參考文檔:http://www.gnu.org/software/emacs/manual/html_node/elisp/Regexp-Special.html#Regexp-Special
'.' 代表任意一個字元(除了分行符號),因此"a.c"能夠匹配abcd 3中的abc
'*' 代表前面的字元(串)可以重複>=0次
比如"e*"在re-builder中也能匹配abcd 3,其實這容易引起混亂,一般不要這樣使用。
而且如果多個字元後面跟*的話,只要能匹配一個字元都算,這個玩意兒真不知道用在何處,感覺就是怎麼都匹配。
建議盡量不要用這個。
如果*用在最前面,只能代表是一般字元,同樣情況適用於+和?,一句話,特殊字元如果用在不可能出現的場合,只能被當作一般字元。
'+' 代表前面的字元(串)必須出現至少一次
比如"bc+d"匹配上面的字串abcd 3
'?' 代表前面的字元(串)出現一次或者0次
'^' 匹配字串開頭
'&' 匹配字串結尾
[...] 裡面可以包括若干字元,只要匹配其中之一即可
比如字串abcd 3 ab
用正則"[bc]",匹配到三個,分別是b c 和最後一個b
[^...] 表示不能是[]裡麵包含的任何字元
\ 代表後面的特殊字元在這裡只是一般字元
注意,如果要匹配字串中的\字元,需要四個\,比如:abcd 3 ab\ ef
Regex寫法:"\\\\"
首先因為ELisp字串寫法中,雙引號裡面的\不顯示,要想顯示出來必須是兩個\
然後Regex文法中\是特殊字元,\\才能表示一個\,
因此"\\\\"就是代表邏輯上的Regex"\\",因此也就匹配了字元\
'*?' '+?' '??' 和'*' '+' '?' 功能相近,只是非貪婪匹配,只匹配最合適的一個。