数据仓库服务 GAUSSDB(DWS)-模式匹配操作符:POSIX正则表达式

时间:2023-12-15 11:45:23

POSIX正则表达式

正则表达式是一个字符序列,它是定义一个串集合 (一个正则集)的缩写。 如果一个串是正则表达式描述的正则集中的一员时, 那么就说这个串匹配该正则表达式。 POSIX正则表达式提供了比LIKE和SIMILAR TO操作符更强大的含义。表2列出了所有可用于POSIX正则表达式模式匹配的操作符。

表2 正则表达式匹配操作符

操作符

描述

例子

~

匹配正则表达式,大小写敏感

'thomas' ~ '.*thomas.*'

~*

匹配正则表达式,大小写不敏感

'thomas' ~* '.*Thomas.*'

!~

不匹配正则表达式,大小写敏感

'thomas' !~ '.*Thomas.*'

!~*

不匹配正则表达式,大小写不敏感

'thomas' !~* '.*vadim.*'

  • 匹配规则
    1. 与LIKE不同,正则表达式允许匹配串里的任何位置,除非该正则表达式显式地挂接在串的开头或者结尾。
    2. 除了上文提到的元字符外, POSIX正则表达式还支持下表的模式匹配元字符。
      表3 模式匹配元字符

      元字符

      含义

      ^

      表示串开头的匹配。

      $

      表示串末尾的匹配。

      .

      匹配任意单个字符。

  • 正则表达式函数
    POSIX正则表达式支持下面函数。
  • 示例
    1
    2
    3
    4
    5
     SELECT 'abc' ~ 'Abc' AS RESULT;
    result 
    --------
     f
    (1 row)
    
    1
    2
    3
    4
    5
    SELECT 'abc' ~* 'Abc' AS RESULT;
     result 
    --------
     t
    (1 row)
    
    1
    2
    3
    4
    5
    SELECT 'abc' !~ 'Abc' AS RESULT;
     result 
    --------
     t
    (1 row)
    
    1
    2
    3
    4
    5
    SELECT 'abc'!~* 'Abc' AS RESULT;
     result 
    --------
     f
    (1 row)
    
    1
    2
    3
    4
    5
    SELECT 'abc' ~ '^a' AS RESULT;
     result 
    --------
     t
    (1 row)
    
    1
    2
    3
    4
    5
    SELECT 'abc' ~ '(b|d)'AS RESULT;
     result 
    --------
     t
    (1 row)
    
    1
    2
    3
    4
    5
    SELECT 'abc' ~ '^(b|c)'AS RESULT;
     result 
    --------
     f
    (1 row)
    

    虽然大部分的正则表达式搜索都能很快地执行,但是正则表达式仍可能被人为地控制,通过任意长的时间和任意量的内存进行处理。不建议从非安全模式来源接受正则表达式搜索模式,如果必须这样做,建议加上语句超时限制。使用SIMILAR TO模式的搜索具有同样的安全性危险, 因为SIMILAR TO提供了很多和POSIX-风格正则表达式相同的能力。LIKE搜索比其他两种选项简单得多,因此在接受非安全模式来源搜索时要更安全些。

support.huaweicloud.com/sqlreference-dws/dws_06_0033.html