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