在 lisp 中应用正则表达式
[序]
长久以来,文本的编辑一直是 lisp 编程的重点、难点之一,有不少活跃在 xdcad 和明经通
道论坛的高手为此写了不少有代表性的文字处理工具,比较知名的如: 。而我自己也写
过不少这方面的程序,多数没有发表,少数零星地发布在以上两个论坛。但由于 lisp 对文
本编辑(*注)的支持函数不够丰富,而实际工作中遇到的情况又多种多样,使得诸多 lisp 程
序对文本编辑的深度和灵活性上还有很多不足之处,不免遗憾。
为此,我一直以来寻求更好的方法,最终只有一个答案:正则表达式。正则表达式对文
本编辑很强,有多强?看看 vb 或 vbs 参考就知道,也可上网一搜。但是,也许本人孤陋寡
闻(或是有的高手潜水潜得很深),在网上一直没有见过在 lisp 中比较充分地应用正则表达式
的程序。其实,我很早就想将正则表达式移植到 lisp 里面来,近几日一鼓作气,终有小成。
谨奉献两个函数:(xxexp)(xxexpr),这两个函数提供了正则表达式的接口,使在 lisp 中得以
应用其强大的功能成为可能。
―――――梁雄啸.2007.7
[*注:“文本”在本文均指对文本字符串内容,非指文本实体(0 . “*TEXT”)]
[函数介绍]
函数:(xxexp pat str key)
功能 对字符串进行正则表达式匹配测试.
参数: pat = 正则表达式模式 ,对应 vbs 正则表达式的模式(expression)。说明: \ 号要用 \
替代.
str = 字符串
key = "i" "g" "m" , "i"不区分大小写(Ignorecase),"g"全局匹配(Global).”m”多行模式
(Multiline),以上几个关键字可以组合使用,或用 ”” .
返回: 返回匹配的字符列表,或无一匹配返回 nil
函数:(xxexpr pat str nstr key)
功能 对字符串进行正则表达式替换.
参数: pat = 正则表达式模式 ,对应 vbs 正则表达式的模式(expression)。说明: \ 号要用 \
替代.
str = 被替换字符串
nstr = 替换字符串
key = "i" "g" "m" , "i"不区分大小写(Ignorecase),"g"全局匹配(Global).”m”多行模
式(Multiline),以上几个关键字可以组合使用,或用 ”” .
返回 :返回替换后的字符串.
[正则表达式模式]
正则表达式核心就是其模式(expression),此部分资料可从网上或 vb,vbs 参考中得到。
以下是 vbs 参考中关于模式的描述列表。在 xxexp,xxexpr 函数应用中,注意”\”符要按”\”来写。
字符 描述
\
将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制
转义符。例如,'n' 匹配字符 "n"。'' 匹配一个换行符。序列 '\' 匹配 "\" 而 "\(" 则匹
配 "("。
^
匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配
评论0