在lisp中应用正则表达式资料.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
在lisp中应用正则表达式 [序] ? 长久以来,文本的编辑一直是lisp编程的重点、难点之一,有不少活跃在xdcad和明经通道论坛的高手为此写了不少有代表性的文字处理工具,比较知名的如:?? 。而我自己也写过不少这方面的程序,多数没有发表,少数零星地发布在以上两个论坛。但由于lisp对文本编辑(*注)的支持函数不够丰富,而实际工作中遇到的情况又多种多样,使得诸多lisp程序对文本编辑的深度和灵活性上还有很多不足之处,不免遗憾。 为此,我一直以来寻求更好的方法,最终只有一个答案:正则表达式。正则表达式对文本编辑很强,有多强?看看vb或vbs参考就知道,也可上网一搜。但是,也许本人孤陋寡闻(或是有的高手潜水潜得很深),在网上一直没有见过在lisp中比较充分地应用正则表达式的程序。其实,我很早就想将正则表达式移植到lisp里面来,近几日一鼓作气,终有小成。谨奉献两个函数:(xxexp)(xxexpr),这两个函数提供了正则表达式的接口,使在lisp中得以应用其强大的功能成为可能。????????????????????????????????? ?―――――梁雄啸.2007.7 ? *注:“文本”在本文均指对文本字符串内容,非指文本实体(0 . “*TEXT”) 函数下载地址:  /?屠文双刀.rar_67el0c7bs5bt2bsp0crn1btrml0c2bk5btmn0cmqju14z97f14z [函数介绍] 函数:(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。\n 匹配一个换行符。序列 \\ 匹配 \ 而 \( 则匹配 (。 ^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 \n 或 \r 之后的位置。 $ 匹配输入字符串的结束位置。如果设置了 RegExp 对象的 Multiline 属性,$ 也匹配 \n 或 \r 之前的位置。 * 匹配前面的子表达式零次或多次。例如,zo* 能匹配 z 以及 zoo。* 等价于{0,}。 + 匹配前面的子表达式一次或多次。例如,zo+ 能匹配 zo 以及 zoo,但不能匹配 z。+ 等价于 {1,}。 ? 匹配前面的子表达式零次或一次。例如,do(es)? 可以匹配 do 或 does 中的do 。? 等价于 {0,1}。 {n} n 是一个非负整数。匹配确定的 n 次。例如,o{2} 不能匹配 Bob 中的 o,但是能匹配 food 中的两个 o。 {n,} n 是一个非负整数。至少匹配n 次。例如,o{2,} 不能匹配 Bob 中的 o,但能匹配 foooood 中的所有 o。o{1,} 等价于 o+。o{0,} 则等价于 o*。 {n,m} m 和 n 均为非负整数,其中n = m。最少匹配 n 次且最多匹配 m 次。例如,o{1,3} 将匹配 fooooood 中的前三个 o。o{0,1} 等价于 o?。请注意在逗号和两个数之间不能有空格。 ? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的

文档评论(0)

0520 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档