<..========================================================
== ==
== Macrobject Nuva Samples ==
== ==
== Copyright (c) 2004-2006 Macrobject Software ==
== ==
== ALL RIGHTS RESERVED ==
== ==
== http://www.macrobject.com ==
== ==
========================================================..>
<.
function TesttheContent, thePattern function DoMatchIndex, Length, Value, Match Result := Value ~ /r/n ~ '-- End --' ~ /r/n;
end function
? theContent.RegexMatchthePattern, Function = 'DoMatch', Option = 'sx' end function
var content
assigncontent.>
(case (what-would-you-like-to-do?)
((learn)
(choose-from FAQ
textbooks
blogs
standards
tutorials
bibliography
other documents
education))
((program)
(choose-from implementations
libraries
environments
SRFIs))
((socialize)
(choose-from Scheme Boston and bothton - Boston, MA, USA
Denver Lispers - Denver, CO, USA
Scheme UK - London, UK
Montreal Scheme/Lisp User Group - Montr¨¦al, Canada
CRACL - Los Angeles, CA, USA
Metro Schemers (no current URL) - Washington, DC, USA))
((work)
(choose-from jobs))
((stay-informed)
(choose-from events))
(else
(choose-from the lighter side
wares
other resources)))
<.end assign
var pattern
assignpattern.>
/( ( (?>[^()]+) | (?R) )* /)
<.end assign
Testcontent, pattern.>
<..
【简介】
本例是一个复杂的正则表达式程序,其中用到了正则的递归匹配。
众所周知,正规语言通常不能表示一个递归结构(上下文无关语言则可)。这是一种扩展功能,使正则表达式可以匹配一个递归结构。如上图的复杂结构(来自 http://www.schemers.org),使用带递归的正则表达式可以成功的匹配出该语言(LISP 的括号嵌套语言)。
【看点】
1、本例演示了复杂的正则操作,如正则的递归功能:
?R 即递归整个正则表达式
本例为了正则式的可读性,特意使用了 x 选项,忽略了正则中的空白成分
2、本例也演示了 Nuva 语言的特殊结构:assign
assign 是一种赋值结构,将该结构内的所有输出赋值给一个变量(左值表达式),该结构内可以任意复杂,嵌套任意成分,其所有的输出都将赋值给这个变量,从而省去了字符串连缀的麻烦。
【扩展】
本例可以进一步扩展以增强其实用性,比如可以匹配诸如 C 语言风格带嵌套 {} 的语法结构。
..>
本例运行结果如下:
(case (what-would-you-like-to-do?)
((learn)
(choose-from FAQ
textbooks
blogs
standards
tutorials
bibliography
other documents
education))
((program)
(choose-from implementations
libraries
environments
SRFIs))
((socialize)
(choose-from Scheme Boston and bothton - Boston, MA, USA
Denver Lispers - Denver, CO, USA
Scheme UK - London, UK
Montreal Scheme/Lisp User Group - Montréal, Canada
CRACL - Los Angeles, CA, USA
Metro Schemers (no current URL) - Washington, DC, USA))
((work)
(choose-from jobs))
((stay-informed)
(choose-from events))
(else
(choose-from the lighter side
wares
other resources)))
-- End --