|
此教程在 aardio 文档里有另一个版本:《 aardio 模式匹配快速入门 》 主要是排版有些区别,文档修订与更新的优先级更高,论坛帖子一些小的问题不再处理。。
一个最简单的模式匹配代码:
var 结果 = string.match("字符串","这里是模式串")
模式串有两个基本的元素:
1. 子模式 - 指定匹配的数据
2. 运算符 - 指定匹配的规则
一、子模式
子模式是模式串里的最小匹配单位,用于表示字符或某一类的字符(或连续的字符序列)。
1. 字面值
字面值指的是a表示a, b表示b,字面意思是什么就表示什么,这个不难理解。
var 匹配结果 = string.match("abcd","abc")
2. 任意字符
一个小圆点"."表示任意单字节字符( 与正则表达式类似 )。
而一个冒号":"表示任意多字节字符( 例如中文字符,正则表达式都是用单个点表示 ) 。
3. 预定义的字符类
正则表达式兼容的字符类:
\n 换行符
\r 回车符
\w 字母和数字
\s 空白符
\d 数字
\f 换页符 '\x0c'
\v 匹配一个垂直制表符。等价于 '\x0b'
\t 制表符
其他字符类:
\a 字母
\c 控制字符
\i 是否ASCII字符( 字节码 < 0x80 )
\l 小写字母
\p 标点字符
\u 大写字母
\x 十六进制数字(正则表达式里用于16进制字符前缀,即\xhh)
\z 表示 '\0'
大写表示反义( 与正则表达式相同 ),例如\D表示不是数字的字符。
import console;
var 匹配结果 = string.match("12345678","\d")
console.log( 匹配结果 ) //显示 1
console.pause();
4. 自定义的字符类
例如`[abcd]`表示字符是 abcd 其中一个,或者`[a-z]`表示 a 到 z 的任意小写字母字符。
//还是返回 1
var str = string.match("12345678","[1230-9]")
5. 自定义的字符元序列
例如<a-zabcd> 他的语法与字符类一样,但是他表示的是一连串的字符序列,而不是其中一个字符。
// 显示 1234
var str = string.match("12345678","<1230-9>")
元序列可组合多个子模式并将其转换为一个新的子模式(可对其应用其他模式运算符),并且在内部可以支持大多数其他模式语法(不能在元序列内创建捕获组,但可以嵌套包含其他元序列)。元序列是具有原子性的非捕获分组,在内部执行贪婪与激进的匹配规则,只要能匹配到内容就会尽力向后走,并且不会在元序列内执行回溯匹配。
参考文档:元序列
二、运算符
运算符是指定一个模式应当怎样去匹配的特殊符号。
运算符只能用于子模式。
如果将『子模式』理解为编程语言里的操作数,那么『运算符』就相当于编程语言里的操作符。
运算符有很多种,而最常用的就是用来指定匹配次数的量词:
p{2,3} 表示子模式 p 出现 2 到 3 次
//匹配结果为 12345
var str = string.match("12345678","\d{2,5}")
p+ 表示子模式 p 出现 1 次到任意次数,等价于 p{1,}
//匹配结果为 12345678
var str = string.match("12345678","\d+")
p* 表示子模式 p 出现 0 次到任意次数,等价于 p{0,}
var str = string.match("12345678","\d+\s*") //这里的"\s*"匹配零个或多个空格
|
|