M语言-模式匹配

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,!
}
  • 省略第一个n,则认为0;省略第二个n,则认是任何数字。两个n都省略则匹配任意数量字符
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"),!
}
  • 多个匹配模式

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...