模式匹配

简介: 模式匹配

模式匹配

Caché支持两种模式匹配系统:

  • Caché模式匹配是一种用问号(?)分隔模式字符串开头的语法。或('?)。
  • 正则表达式可以与$LOCATE$MATCH函数以及%Regex.Matcher类的方法一起使用。(这些函数方法在2016之后才有,2010版本没有。)

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

s var = "abcDEf"
  if (var ?.e2U.e) && $match(var, "^.{3,7}") { 
    w "match!"
  } else { 
    w "no match"
  }
复制代码
  • 模式匹配运算符测试其左操作数中的字符是否由右操作数中的模式正确指定。它返回一个布尔值。当模式正确指定左操作数中的字符模式时,模式匹配运算符会产生TRUE(1)结果。如果模式没有正确指定左操作数中的字符模式,则生成FALSE(0)结果。
s str = "521-13-1411"
  s match = str ? 3N1"-"2N1"-"4N
  w match,!
复制代码

提供的特殊模式代码

代码 含义
A 匹配任何大写或小写字母字符。包括ASCII值65到90(A到Z)、97到122(a到z)、170、181、186、192到214、216到246和248到255
C 匹配任何ASCII控制字符(ASCII值0到31和扩展ASCII值127到159)
E 匹配任何字符,包括非打印字符、空格字符和控制字符。
L 匹配任何小写字母字符。包括ASCII值97到122(a到z)、170、181、186、223到246和248到255
N 匹配10个数字字符0到9(ASCII 48到57)中的任何一个。
P 匹配任何标点符号。包括ASCII值32到47、58到64、91到96、123到126、160到169、171到177、180、182到184、187、191、215和247
U 匹配任何大写字母字符。包括ASCII值65到90(A到Z)、192到214和216到222
R,B,M 匹配西里尔8位字母字符映射。R匹配任何西里尔字符(ASCII值192到255)。B匹配大写西里尔字符(ASCII值192到223)。M匹配小写西里尔字符(ASCII值为224到255)。这些模式代码仅在俄语8位Windows区域设置(Ruw8)中有意义。在其他地区,可以成功执行,但无法匹配任何字符。
ZFWCHARZ 匹配日语ZENKAKU字符集中的任何字符。ZFWCHARZ匹配全角字符,例如汉字范围中的字符,以及在某些终端仿真器显示时占用双倍单元格的许多非汉字字符。ZFWCHARZ还匹配JIS2004标准中定义的303个代理项对字符,将每个代理项对视为单个字符。例如,代理项对字符$WC(131083)?1ZFWCHARZ匹配。此模式匹配代码需要日语区域设置。
ZHWKATAZ 匹配日文汉字假名字符集中的任何字符。这些是Unicode65377(FF61)65439(FF9F)。此模式匹配代码需要日语区域设置。
s var = "A"
  w "字母字符? "
  w var ? 1A,!
  s var = $char(10)
  w "控制字符? "
  w var ? 1C,!
  s var = $char(13) _ "A" _ "a"
  w "任何字符? "
  w var ? 3E,!
  s var = "a"
  w "小写字母? "
  w var ? 1L,!
  s var = "2"
  w "数字字符? "
  w var ? 1N,!
  s var = "."
  w "标点符号? "
  w var ? 1P,!
  s var = "U"
  w "大写字母? "
  w var ? 1U,!
复制代码
  • 特殊模式代码不区分大小写;可以用大写或小写指定。
s str = "12345"
  s match = str ? 5N
  w match,!
  s match = str ? 5n
  w match,!
  s str = "1"
  s match = str ? 1NU
  w match,!
  s str = "A"
  s match = str ? 1nu
  w match,!


相关文章
|
10月前
常用正则表达式 (必备)
常用正则表达式 (必备)
258 0
|
10月前
|
数据安全/隐私保护
正则表达式小结
正则表达式小结
73 0
|
10月前
|
Unix Perl
基本正则表达式
基本正则表达式
49 2
|
算法 Java
从0到1打造正则表达式执行引擎(一) 正则表达式转NFA (1)
重复匹配(正则表达式中的 ? + *) 正则表达式里有4种表示重复的方式,分别是:
102 1
|
设计模式 算法
从0到1打造正则表达式执行引擎(一) 正则表达式转NFA (2)
看完上文之后相信你一直知道如果将一个正则表达式转化为状态机的方法了,这里我们要将理论转化为代码。首先我们要将图转化为代码标识,我用State表示一个节点,其中用了Map<MatchStrategy, List> next表示其后继节点,next中有个key-value就是一条边,MatchStrategy用来描述边的信息。
92 0
|
算法 C语言
模式匹配算法
本文主要用C语言实现模式匹配算法。
158 2
模式匹配算法
|
Perl 运维 Linux
漫谈正则表达式
一、概述 正则表达式(Regular Expression)通常被用来检索、替换那些符合某个模式(规则)的文本。
985 0
|
Shell Linux Python
正则表达式与运用
正则表达式用的地方是很多的。比如字符串处理过程中。最近遇到记录一下。 1. 比如在shell中 1 #!/bin/bash 2 3 str="date:2017-11-28 os:centos blackbord:blog" 4 5 echo $str | grep centos --colo...
1301 0