您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

正则表达式中的元字符

元字符是在正则表达式中具有特殊含义的符号或字符。

元字符的处理视以下情况而异:

  • 正则表达式是与 SIMILAR TO 或 REGEXP 搜索条件一起使用,还是与 REGEXP_SUBSTR 函数一起使用。

  • 元字符是否在正则表达式的字符类的内部。

    在继续之前,应了解字符类的定义。字符类是一组括在方括号内的字符,将根据这组字符对字符串中的字符进行匹配。例如,在 SIMILAR TO 'ab[1-9]' 语法中,[1-9] 就是一个字符类,它与 1 到 9 范围中(包括 1 和 9)的某一数字匹配。正则表达式中元字符的处理方式各不相同,这取决于元字符是否被放在字符类的内部。具体来说,当元字符放在字符类的内部时,多数元字符作为常规字符来处理。

    对于 SIMILAR TO(仅限于 SIMILAR TO),元字符 *、?、+、_、|、(、) 和 { 必须在字符类内进行转义。

    要在字符类中包括减号 (-)、脱字符 (^) 或直角方括号 (]) 字符,必须将字符转义。

    此表列出了所支持的正则表达式元字符。当 SIMILAR TO、REGEXP 和 REGEXP_SUBSTR 使用元字符时,几乎所有元字符的处理方式都相同:

    字符其它信息[ ]左右方括号用于指定字符类。字符类是进行匹配时所要依据的一组字符。 除连字符 (-) 和脱字符 (^) 外,在字符类中指定的元字符和量词(如 * 和 {m},分别为元字符和量词)没有特殊意义,可当作实际字符进行运算。 还支持 POSIX 字符类等子字符类。*星号可用于与字符匹配 0 次或多次。例如,REGEXP '.*abc' 匹配的字符串以 abc 结尾并以任何前缀开头。因此,aabc、xyzabc 和 abc 匹配,但 bc 和 abcc 不匹配。 ?问号可用于与字符匹配 0 次或 1 次。例如,'colou?r' 匹配 color 和 colour。 +加号可用于与字符匹配 1 次或多次。例如,'bre+' 匹配 bre 和 bree,但不匹配 br。 -可以在字符类中使用一个连字符来表示一个范围。例如,REGEXP '[a-e]' 匹配 a、b、c、d 和 e。 %百分号可与 SIMILAR TO 配合使用来匹配任意数目的字符。不将百分号视为 REGEXP 和 REGEXP_SUBSTR 所使用的元字符。当指定时,它匹配百分号 (%)。 _可将下划线与 SIMILAR TO 配合使用来匹配单个字符。不将下划线视为 REGEXP 和 REGEXP_SUBSTR 所使用的元字符。当指定时,它匹配下划线 (_)。 |管道符号用于指定匹配字符串时要使用的替代模式。在由竖线分隔的一行模式中,竖线被解释为 OR,匹配过程从最左侧的模式开始,在找到第一个匹配项时停止。因此,您应按优先级的降序顺序列出模式。您可以指定任意数量的替代模式。( )当左括号和右括号用于正则表达式的各个组合部分时,它们为元字符。例如,(ab)* 匹配零个或多个 ab 的重复项。与使用数学表达式一样,您使用组合来控制正则表达式各部分的计算顺序。 { }当左大括号和右大括号用于指定量词时,它们为元字符。量词指定一个模式要构成某个匹配所必须重复的次数。例如: {}匹配某个字符正好 次。例如,'519-[0-9]{3}-[0-9]{4}' 匹配 519 地区号中的一个电话号码(假定数据按语法中定义的方式进行格式设置)。 {,}匹配某个字符至少 次。例如,'[0-9]{5,}' 匹配任何含有五个或更多数字的字符串。 {,} 匹配某个字符至少 次,但不超过 次。例如,SIMILAR TO '_{5,10}' 匹配任何含有 5 到 10(含 5 和 10)个字符的字符串。 \反斜线被用作元字符的转义字符。它也可被用于转义非元字符。^对于 REGEXP 和 REGEXP_SUBSTR,当脱字符在字符类的外部时,脱字符匹配字符串的开头字符。例如,'^[hc]at' 匹配 hat 和 cat,但只在字符串的开头。 当用在字符类内部时,以下行为适用: REGEXP 和 REGEXP_SUBSTR当脱字符为字符类中的第一个字符时,它与字符集中字符以外的任何字符匹配。例如,REGEXP '[^abc]' 匹配 a、b 或 c 以外的任何字符。 如果脱字符不是方括号内的第一个字符,那么它匹配脱字符。例如,REGEXP_SUBSTR '[a-e^c]' 匹配 a、b、c、d、e 和 ^。 SIMILAR TO对于 SIMILAR TO,脱字符被视作减号运算符。例如,SIMILAR TO '[a-e^c]' 匹配 a、b、d 和 e。 $当与 REGEXP 和 REGEXP_SUBSTR 一起使用时,匹配字符串的结尾字符。例如,REGEXP 'cat$' 匹配 cat,但不匹配 catfish。 .当与 REGEXP 和 REGEXP_SUBSTR 一起使用时,匹配任何单个字符。例如,REGEXP 'a.cd' 匹配以 a 开头并以 cd 结尾的含有四个字符的任何字符串。 当与 SIMILAR TO 一起使用时,它匹配句点 (.)。 :在字符集中使用冒号来指定子字符类。例如,'[[:alnum:]]'。 