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

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

posted on 2006-08-30 18:09  Wisdom-zh  阅读(378)  评论(0编辑  收藏  举报

导航