ELisp编程十一:正则表达式一

交互式编写正则表达式


比如buffer中有一个字符串


abcd 3


运行命令:


M-x:re-builder


会出现一个小buffer,在双引号里面输入正则表达式d ,上面有字符串的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


正则表达式写法:"\\\\"


首先因为ELisp字符串写法中,双引号里面的\不显示,要想显示出来必须是两个\


然后正则表达式语法中\是特殊字符,\\才能表示一个\,


因此"\\\\"就是代表逻辑上的正则表达式"\\",因此也就匹配了字符\


'*?' '+?' '??' 和'*' '+' '?' 功能相近,只是非贪婪匹配,只匹配最合适的一个。





你可能感兴趣的:(正则表达式)