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

本文介绍了一个使用正则表达式的程序实例,通过读取文件并匹配特定模式来展示正则表达式的应用。程序利用了System.Text中的Regex类及Match类的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<..========================================================
==
==
==
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
.>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值