Nuva 示例代码(每日一帖)之 正则表达式(3)
来源:互联网 发布:腾讯网络加速器内测版 编辑:程序博客网 时间:2024/05/07 13:34
<..========================================================
== ==
== Macrobject Nuva Samples ==
== ==
== Copyright (c) 2004-2006 Macrobject Software ==
== ==
== ALL RIGHTS RESERVED ==
== ==
== http://www.macrobject.com ==
== ==
========================================================..>
<.
var text = System.File.Load正则表达式(3).nuva' var regex = System.Text.Regex'(?P<word>/w+)', 's' var match = regex.Matchtext loop
? match.UnmatchedValue
if match.Success var group = match.GroupByName'word' ? '[' ~ group.Index ~ ',' ~ group.Length ~ ']'
? match.Value
match.NextMatch else
exit loop
end if
end loop
.>
<..
【简介】
本例是一个简单的正则表达式程序。
本例的程序读入一个文件(即本例代码),然后进行正则匹配,打印匹配串和未匹配串,并在匹配串的前面插入匹配位置和长度。
【看点】
1、本例演示了字符串的正则操作,其中用到了 System.Text 中的三个类,如下:
Regex:正则类,通过 System.Text.Regex(正则串, [选项]) 创建
如:aregex = System.Text.Regex('/w+', 's')
正则串和选项的介绍请参见前面介绍的其他示例程序
Match:匹配类,通过 Regex.Match(匹配正文) 创建
如:amatch = aregex.Match('aregex.match')
本例中用到了 Match 类的一些方法,如下:
UnmatchedValue,返回最后一次匹配的未匹配串(如果该次匹配成功,则是和上一个匹配串之间的剩余未匹配串)
Success,返回最后一次匹配是否成功
GroupByName,按名字获取相应的匹配组对象
Value,最后一次的匹配串
NextMatch,进行下一次匹配
Group:匹配组类,通过 Match.GroupByName(组名) 创建
如:agroup = amatch.GroupByName('word')
本例中用到了 Group 类的一些方法,如下:
Index,该组的位置(首字符位置)
Length,该组的长度
【扩展】
本例可以进一步扩展以增强其实用性,比如可以在匹配正文中插入更多的信息等。
..>
本例运行结果如下:
<..========================================================
== ==
== [140,10]Macrobject [151,4]Nuva [156,7]Samples ==
== ==
== [252,9]Copyright ([263,1]c) [266,4]2004-[271,4]2006 [276,10]Macrobject [287,8]Software ==
== ==
== [386,3]ALL [390,6]RIGHTS [397,8]RESERVED ==
== ==
== [505,4]http://[512,3]www.[516,10]macrobject.[527,3]com ==
== ==
========================================================..>
<.
[677,3]var [681,4]text = [689,6]System.[696,4]File.[701,4]Load('正则表达式([719,1]3).[723,4]nuva')
[733,3]var [737,5]regex = [745,6]System.[752,4]Text.[757,5]Regex('(?[766,1]P<[768,4]word>/[774,1]w+)', '[781,1]s')
[788,3]var [792,5]match = [800,5]regex.[806,5]Match([812,4]text)
[821,4]loop
? [833,5]match.[839,14]UnmatchedValue
[859,2]if ([863,5]match.[869,7]Success)
[885,3]var [889,5]group = [897,5]match.[903,11]GroupByName('[916,4]word')
? '[' ~ [938,5]group.[944,5]Index ~ ',' ~ [958,5]group.[964,6]Length ~ ']'
? [986,5]match.[992,5]Value
[1013,5]match.[1019,9]NextMatch()
[1036,4]else
[1048,4]exit [1053,4]loop
[1063,3]end [1067,2]if
[1073,3]end [1077,4]loop
.>
- Nuva 示例代码(每日一帖)之 正则表达式(3)
- Nuva 示例代码(每日一帖)之 正则表达式(1)
- Nuva 示例代码(每日一帖)之 正则表达式(2)
- Nuva 示例代码(每日一帖)之 正则表达式(递归)
- Nuva 示例代码(每日一帖)之 简单浏览器
- Nuva 示例代码(每日一帖)之 国际化界面
- Nuva 示例代码(每日一帖)之 正则测试器
- Nuva 示例代码(每日一帖)之 模板示例(3)
- Nuva 示例代码(每日一帖)之 模板示例(1)
- Nuva 示例代码(每日一帖)之 模板示例(2)
- Nuva 示例代码(每日一帖)之 添加版权信息
- Nuva 示例代码(每日一帖)之 生成网站地图
- 每日一vim(10)正则表达式
- 每日一Vim(10)-----正则表达式
- Nuva 语言的渊源(3)之 惰性计算
- 深入浅出之正则表达式(一)
- 深入浅出之正则表达式(一)
- 深入浅出之正则表达式(一)
- Excel - 使用跨sheet定义Drop_List 下拉列表
- 关于游戏这回事
- delegate类型
- 申请带@msn.com后缀的邮箱
- Ajax 实现在WebForm中拖动控件并即时在服务端保存状态数据 (Asp.net 2.0)(示例代码下载)
- Nuva 示例代码(每日一帖)之 正则表达式(3)
- 一点一点学ASP.NET之基础概念——HttpHandler
- 禅的公案
- 一点一点学ASP.NET之基础概念——HttpModule
- javascript实现联动菜单
- Spring MVC 入门
- 外科小偏方:防止痔疮出血的“小窍门”
- 一点一点学ASP.NET之基础概念——HTTP运行期与页面执行模型
- SSE/SSE2版ceilf