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

来源:互联网 发布:如何在淘宝上买盗版书 编辑:程序博客网 时间:2024/05/17 23:43

使用re-builder交互式使用正则


比如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次


如果*用在最前面,只能代表是普通字符,同样情况适用于+和?,一句话,特殊字符如果用在不可能出现的场合,只能被当作普通

字符


'+' 代表前面的字符(串)必须出现至少一次


比如"bc+d"匹配上面的字符串abcd 3


'?' 代表前面的字符(串)出现一次或者0次


'^' 匹配字符串开头


'&' 匹配字符串结尾


[...] 里面可以包括若干字符,只要匹配其中之一即可


比如字符串abcd  3 ab


用正则"[bc]",匹配到三个,分别是b c 和最后一个b


[^...] 表示不能是[]里面包含的任何字符


\ 代表后面的特殊字符在这里只是普通字符


注意,如果要匹配字符串中的\字符,需要四个\,比如:abcd  3 ab\ ef


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


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


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


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


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