专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »编程综合 » 正则表达式:代替正则——HyperScriptExpression联合开发倡议公告 »正文

正则表达式:代替正则——HyperScriptExpression联合开发倡议公告

来源: 发布时间:星期日, 2009年9月6日 浏览:2次 评论:0
正则难写和复杂语法使得出学者们难以接触为了解决这个难题本人决定请诸位和本人起开发HyperScriptExpression(以后简称HSE)HSE全部使用标记(Marked)形式语法规整例如:
正则\d{2}-\d{5}等价HSE为:<rep=2><digit></rep>-<rep=5><digit></rep>
正则<(.*)>.*<\/\1>等价HSE为:<<rem(><*><any></*><)>><*><any></*></<rem=1>>
正则^Chapter [1-9][0-9]{0,1}等价HSE为:<@start>Chapter <in>1-9</in><rep=0,1><in>0-9</in></rep>
正则(\w)+[@]{1}((\w)+[\.]){1,3}(\w)+等价HSE为:<+><word></+><rep1>@</rep><rep=1,3><word+>.</rep><word+>
HSE 语法注释

<> 转移符号<用<代替>用>代替
<@start> 匹配输入开始位置如果设置了 HSE 对象 Multiline 属性<@start> 也匹配<crlf>或<cr>的后位置
<@over> 匹配输入结束位置如果设置了 HSE 对象 Multiline 属性<@over> 也匹配<crlf>或<cr>的前位置
<*></*> 匹配前面子表达式零次或多次例如z<*>o</*> 能匹配 "z" 以及 "zoo"等价于<least=0></least>
<+></+> 匹配前面子表达式次或多次例如'z<+>o</+>' 能匹配 "zo" 以及 "zoo"但不能匹配 "z"等价于<least=1></least>
<sel></sel> 匹配前面子表达式零次或例如"do<sel>es</sel>" 可以匹配 "do" 或 "does" 中"do" 等价于<rep=0,1></rep>
<rep=n></rep> n 是个非负整数匹配确定 n 次例如'<rep=2>o</rep>' 不能匹配 "Bob" 中 'o'但是能匹配 "food" 中两个 o
<least=n></least> n 是个非负整数至少匹配n 次例如'<least=2>o</least>' 不能匹配 "Bob" 中 'o'但能匹配 "foooood" 中所有 o
<rep=m,n></rep> m 和 n 均为非负整数其中n >= m最少匹配 m 次且最多匹配 n 次例如"<rep=1,3>o</rep>" 将匹配 "fooooood" 中前 3个 o请注意在逗号和两个数的间不能有空格
NG属性 当该紧跟在任何个其他限制符后面时匹配模式是非贪婪非贪婪模式尽可能少匹配所搜索而默认贪婪模式则尽可能多匹配所搜索例如对于串 "oooo"'<+ NG>o</+>' 将匹配单个 "o"而 '<+>o</+>' 将匹配所有 'o'
<anything>或<any> 匹配除 "<crlf>" 的外任何单个要匹配包括 '<crlf>' 在内任何请使用象 '<in><any><crlf></in>' 模式
<rem(>p</)>或
<rem>p</rem>
匹配 p 并获取这匹配所获取匹配可以从产生 Matches 集合得到使用 SubMatches 集合$0…$9 属性
<(>pattern</)> 匹配 pattern 但不获取匹配结果也就是说这是个非获取匹配不进行存储供以后使用这在使用 "或" (|) 来组合个模式各个部分是很有用例如 'industr<(>y<or>ies</)> 就是个比 'industry|industries' 更简略表达式
<eq>pattern</eq> 正向预查在任何匹配 pattern 串开始处匹配查找这是个非获取匹配也就是说该匹配不需要获取供以后使用例如 'Windows <eq>95<or>98<or>NT<or>2000</eq>' 能匹配 "Windows 2000" 中 "Windows" 但不能匹配 "Windows 3.1" 中 "Windows"预查不消耗也就是说个匹配发生后在最后次匹配的后立即开始下次匹配搜索而不是从包含预查的后开始
<neq>pattern</neq> 负向预查在任何不匹配 pattern 串开始处匹配查找这是个非获取匹配也就是说该匹配不需要获取供以后使用
x<or>y 匹配 x 或 y例如'z<or>food' 能匹配 "z" 或 "food"'<(>z<or>f</)>ood' 则匹配 "zood" 或 "food"
<in></in> 集合匹配所包含任意例如'<in>abc</in>' 可以匹配 "plain" 中 'a'
<nin></nin> 负值集合匹配未包含任意例如'<nin>abc</nin>' 可以匹配 "plain" 中'p'
<in>a-z</in> 范围匹配指定范围内任意
<nin>a-z</nin> 负值范围匹配任何不在指定范围内任意
<border></border> 匹配个单词边界也就是指单词和空格间位置
<nborder></nborder> 匹配非单词边界<border>否定
<control=x> 匹配由 x 指明控制例如<control=M> 匹配个 Control-M 或回车符x 值必须为 A-Z 或 a-z 的否则将 <control> 视为 <nothing>
<digit> 匹配个数字可以使用<digit+>,<digit*>,<digit?>格式下同
<ndigit> 匹配个非数字
<page> 匹配个换页符
<crlf> 匹配个换行符
<cr> 匹配个回车符
<blank> 匹配任何空白包括空格、制表符、换页符等等
<nblank> 匹配任何非空白
<tab> 匹配个制表符
<vtab> 匹配个垂直制表符
<word> 匹配包括下划线任何单词
<nword> 匹配任何非单词
<hex=n> 匹配 n其中 n 为十 6进制转义值十 6进制转义值必须为确定两个数字长
<call=num> 匹配 num其中 num 是个正整数对所获取匹配引用例如'<rem><any></rem><call=1>' 匹配两个连续相同
<oct=n> 标识个 8进制转义值
<unicode=n> 匹配 n其中 n 是个用 4个十 6进制数字表示 Unicode 例如 \u00A9 匹配版权符号 (©)
<nothing>或者
<nil> 匹配空用于选择比如<nothing><or>a<or>b<or>c<or>d代表a,b,c,d或者没有(空)
<total> 强制性全部串匹配比如<total>HS<in>DEF</in>可匹配HSD但不可以匹配HSDB中HSD

0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: