• M语言-模式匹配


    1.概述

            Cache支持两种模式匹配

    • 用问号(?)分割模式字符串开头的语法
    • 正则表达式可以与$LOCATE和$MATCH函数、以及%Regex.Matcher类的方法一起使用
    • 模式匹配运算符会对左操作字符进行匹配,如果未能匹配,会返回0(代表false);如果匹配,则返回1(代表true)

            这些模式匹配系统是完全独立的,每个模式匹配系统只能在其自己的上下文中使用,但是可以使用逻辑AND和OR语法,来组合不同模式匹配。

    1. ClassMethod MyFunction()
    2. {
    3. set str = "abcDEfgh"
    4. //输出1
    5. w str ?.e2U.e,!
    6. //输出0
    7. w $match(str, "^.{3,7}"),!
    8. //输出not match
    9. if (str ?.e2U.e) && ($match(str, "^.{3,7}")){
    10. w "match"
    11. }else{
    12. w "not match"
    13. }
    14. }
    1. ClassMethod MyFunction1()
    2. {
    3. set str = "999-5-6666"
    4. //输出1
    5. w str ? 3N1"-"1N1"-"4N
    6. }

    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

            如下所示:

    1. ClassMethod MyFunction2()
    2. {
    3. set str1 = "U"
    4. //输出1
    5. w "大写字母:", str1 ? 1a,!
    6. set str2 = "u"
    7. //输出1
    8. w "小写字母:", str2 ? 1L,!
    9. set str3 = $char(10)
    10. //输出1
    11. w "控制字符:", str3 ? 1c,!
    12. set str4 = "11"
    13. //输出1
    14. w "数字字符:", str4 ? 2N,!
    15. set str5 = ".,:"
    16. //输出1
    17. w "标点符号:", str5 ? 3p,!
    18. }

    3.模式匹配规则

    3.1 指定模式匹配可以出现的次数

    • 如果要定义模式匹配出现的次数,可以使用如下格式:n.n
    1. ClassMethod MyFunction3()
    2. {
    3. set str = "AAAAA"
    4. //表示匹配1到5个A,输出:1
    5. w str ? 1.5"A",!
    6. set str = "AAAAA"
    7. //输出:0
    8. w str ? 1.4"A",!
    9. set str = "ababab"
    10. //输出:1
    11. w str ? 1.3"ab"
    12. set str = "aabababc",!
    13. //输出:0
    14. w str ? 1.3"ab"
    15. }
    • 指定模式匹配规则代码出现的次数
    1. ClassMethod MyFunction4()
    2. {
    3. set str = "abcDefg"
    4. //输出:1
    5. w str ? 1.7A,!
    6. //输出:0
    7. w str ? 1.6A,!
    8. }
    • 省略第一个n,则默认为0;省略第二个n,则默认是任何数字。两个n都省略则匹配任意数量字符
    1. ClassMethod MyFunction5()
    2. {
    3. set str = "a"
    4. //表示匹配0到2个大写或小写字母,输出:1
    5. w str ? .2A,!
    6. set str = "ABCDEFGH"
    7. //表示匹配1到任意数量的大写字母,输出:1
    8. w str ? 1.A,!
    9. set str = "s./:l@3"
    10. //表示匹配任意数量的任何字符,输出:1
    11. w str ? .E,!
    12. }

    3.2 指定多个匹配模式

            要定义多个匹配模式,可以将n和模式组合成任意长度的序列       

    1. ClassMethod MyFunction()
    2. {
    3. set str = "2022-06-06"
    4. //输出1
    5. w str ? 4N1"-"2N1"-"2N,!
    6. set str = "6/6/2022"
    7. //输出1
    8. w str ? 1.2N1"/"1.2N1"/"1.4N,!
    9. }

    3.3 指定组合模式

            使用组合模式时,将按照匹配模式规则顺序匹配。

    1. ClassMethod MyFunction()
    2. {
    3. //输出1
    4. w "123" ? 3N.4L,!
    5. //输出0
    6. w "123abcde" ? 3N.4L,!
    7. //输出1
    8. w "123abcde" ? 3N.5L,!
    9. //输出0
    10. w "123abcde" ? 5L.3N,!
    11. }

    3.4 指定交替模式

            可以根据多个匹配模式交替进行判断

    • 单个匹配模式
    1. ClassMethod MyFunction()
    2. {
    3. //输出1
    4. w "a" ? 1(1"a",1"b"),!
    5. //输出0
    6. w "ab" ? 1(1"a",1"b"),!
    7. //输出1
    8. w "ab" ? 1(1"a",1"b",1"ab"),!
    9. }
    • 多个匹配模式

  • 相关阅读:
    linux内核各方向资料贴
    ATECLOUD电源测试软件平台如何测试电源纹波?
    安卓手机如何无线连接adb?
    CN考研真题知识点二轮归纳(4)
    Android Snackbar
    《计算机视觉中的多视图几何》笔记(11)
    权限提升Linux篇
    论文笔记:ViTGAN: Training GANs with Vision Transformers
    Abp Quartz配置Sqlite
    JSP+MySQL基于ssm的主题酒店管理系统
  • 原文地址:https://blog.csdn.net/qq_35507234/article/details/126490639