您的位置:首页 > 编程语言

Nuva 示例代码(每日一帖)之 正则表达式(3)

2006-08-30 10:09 501 查看
<..========================================================
==                                                       ==
==                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.Match(text)
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
.>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: