• 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. }
    • 多个匹配模式

  • 相关阅读:
    学长教你学C-day6-C语言内存分区
    自定义MVC原理
    海思高校合作——QA培训资料
    【Pandas】数据透视表函数 pivot_table()
    Git常用命令介绍
    PCIe协议翻译【第三章】【Data Link Layer Specification】
    JDBC操作SQLite的工具类
    开源风雷CFD软件多物理场耦合接口开发路线分享!!!
    尚硅谷大数据项目《在线教育之离线数仓》笔记006
    万卷书 - 大力娃的书单
  • 原文地址:https://blog.csdn.net/qq_35507234/article/details/126490639