1.概述
Cache支持两种模式匹配:
- 用问号(?)分割模式字符串开头的语法
- 正则表达式可以与$LOCATE和$MATCH函数、以及%regex.Matcher类的方法一起使用
- 模式匹配运算符会对左操作字符进行匹配,如果未能匹配,会返回0(代表false);如果匹配,则返回1(代表true)
这些模式匹配系统是完全独立的,每个模式匹配系统只能在其自己的上下文中使用,但是可以使用逻辑AND和OR语法,来组合不同模式匹配。
ClassMethod MyFunction()
{
set str = "abcDEfgh"
//输出1
w str ?.e2U.e,!
//输出0
w $match(str, "^.{3,7}"),!
//输出not match
if (str ?.e2U.e) && ($match(str, "^.{3,7}")){
w "match"
}else{
w "not match"
}
}
ClassMethod MyFunction1()
{
set str = "999-5-6666"
//输出1
w str ? 3N1"-"1N1"-"4N
}
2.模式匹配规则代码(不区分大小写)
A | 匹配任何大写或小写字母字符 包括ASCLL值从65到90(A到Z)、97到122(a到z)、177、181、186、192到214、216到246、248到255 |
C | 匹配任何ACsll控制字符 ASCLL值从0到31、127到159 |
E | 匹配任何字符 包括非打印字符、空格字符和控制字符 |
L | 匹配任何小写字母字符 包括ASCLL值从97到122(a到z)、170、181、186、223到246、248到255 |
N | 匹配0到9(ASCLL从48到57)中的任何一个 |
P | 匹配任何标点符号 包括ASCLL值从32到47、58到64、91到96、123到126、160到169、171到177、180、182到184、187、191、215、247 |
U | 匹配任何大写字母字符 包括ASCLL值从65到90(A到Z)、192到214、216到222 |
如下所示:
ClassMethod MyFunction2()
{
set str1 = "U"
//输出1
w "大写字母:", str1 ? 1a,!
set str2 = "u"
//输出1
w "小写字母:", str2 ? 1L,!
set str3 = $char(10)
//输出1
w "控制字符:", str3 ? 1c,!
set str4 = "11"
//输出1
w "数字字符:", str4 ? 2N,!
set str5 = ".,:"
//输出1
w "标点符号:", str5 ? 3p,!
}
3.模式匹配规则
3.1 指定模式匹配可以出现的次数
- 如果要定义模式匹配出现的次数,可以使用如下格式:n.n
ClassMethod MyFunction3()
{
set str = "AAAAA"
//表示匹配1到5个A,输出:1
w str ? 1.5"A",!
set str = "AAAAA"
//输出:0
w str ? 1.4"A",!
set str = "ababab"
//输出:1
w str ? 1.3"ab"
set str = "aabababc",!
//输出:0
w str ? 1.3"ab"
}
ClassMethod MyFunction4()
{
set str = "abcDefg"
//输出:1
w str ? 1.7A,!
//输出:0
w str ? 1.6A,!
}
ClassMethod MyFunction5()
{
set str = "a"
//表示匹配0到2个大写或小写字母,输出:1
w str ? .2A,!
set str = "ABCDEFGH"
//表示匹配1到任意数量的大写字母,输出:1
w str ? 1.A,!
set str = "s./:l@3"
//表示匹配任意数量的任何字符,输出:1
w str ? .E,!
}
3.2 指定多个匹配模式
要定义多个匹配模式,可以将n和模式组合成任意长度的序列
ClassMethod MyFunction()
{
set str = "2022-06-06"
//输出1
w str ? 4N1"-"2N1"-"2N,!
set str = "6/6/2022"
//输出1
w str ? 1.2N1"/"1.2N1"/"1.4N,!
}
3.3 指定组合模式
使用组合模式时,将按照匹配模式规则顺序匹配。
ClassMethod MyFunction()
{
//输出1
w "123" ? 3N.4L,!
//输出0
w "123abcde" ? 3N.4L,!
//输出1
w "123abcde" ? 3N.5L,!
//输出0
w "123abcde" ? 5L.3N,!
}
3.4 指定交替模式
可以根据多个匹配模式交替进行判断
- 单个匹配模式
ClassMethod MyFunction()
{
//输出1
w "a" ? 1(1"a",1"b"),!
//输出0
w "ab" ? 1(1"a",1"b"),!
//输出1
w "ab" ? 1(1"a",1"b",1"ab"),!
}
- 多个匹配模式