【问题标题】:Oracle - RegEx pattern to return records that have non-alphanumeric characters NOT including spacesOracle - 正则表达式模式返回具有非字母数字字符的记录,不包括空格
【发布时间】:2017-10-12 00:11:03
【问题描述】:

这是一个示例列:

+---------------+
|     NAME      |
+---------------+
| Jim Jo'nes    |
| John $mith    |
| Leroy Jenkins |
| Tom & Jerry   |
+---------------+

我需要编写一个 RegEx 模式,该模式返回包含非字母数字字符且不包含空格的字段。这是一个名称字段,可以包含多个用空格分隔的名称。

我的预期结果集是这样的:

Jim Jo'nes
John $mith
Tom & Jerry

【问题讨论】:

    标签: sql regex oracle


    【解决方案1】:

    使用应用于字母数字 ([:alnum:]) 和空格 ([:space:]) 字符类的 [^ ... ] 运算符(不匹配字符列表):

    [^[:alnum:][:space:]]
    

    演示:https://regex101.com/r/VOzqFn/1

    【讨论】:

    • 我仍然得到包含空格但没有其他字母数字字符的名称。
    【解决方案2】:

    使用带有否定字符集的 REGEXP_LIKE 条件

    我会先关闭使用'&'来识别替换变量:

    set define off;
    

    接下来,我将只识别您不查找的所有字符:

    a-z, A-Z, 0-9, \s (the escape version of a space character)
    

    然后我创建一个否定字符集:

    [^a-zA-Z0-9 ]
    

    这是我得到的解决方案:

    SCOTT@tst>WITH names AS (
      2      SELECT
      3          'Jim Jo''nes' name
      4      FROM
      5          dual
      6      UNION ALL
      7      SELECT
      8          'John $mith' name
      9      FROM
     10          dual
     11      UNION ALL
     12      SELECT
     13          'Leroy Jenkin' name
     14      FROM
     15          dual
     16      UNION ALL
     17      SELECT
     18          'Tom & Jerry' name
     19      FROM
     20          dual
     21  ) SELECT
     22      *
     23  FROM
     24      names
     25  WHERE
     26          1 = 1
     27      AND
     28          REGEXP_LIKE ( names.name,'[^a-zA-Z0-9 ]' );
    
    
    name         
    ---------- 
    Jim Jo'nes   
    John $mith   
    Tom & Jerry  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-02
      • 1970-01-01
      • 1970-01-01
      • 2017-12-01
      • 1970-01-01
      • 2013-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多