Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在ORACLE正则表达式中对字符类进行例外?_Sql_Regex_Oracle - Fatal编程技术网

Sql 如何在ORACLE正则表达式中对字符类进行例外?

Sql 如何在ORACLE正则表达式中对字符类进行例外?,sql,regex,oracle,Sql,Regex,Oracle,我需要从Oracle DB中提取所有包含非标准格式或无效字符序列的客户名称,例如:(空格和标点重复)。为此,我使用了类似REGEXP_的(Customer_Name,'[[:space:[:punct:]]{2,})表达式 但是我需要允许一些例外情况,比如一些空格和标点重复是可以接受的。试图在“NOT”运算符后插入它们(请参见我的代码) 我正在使用下面的代码: WITH T (id, col) AS ( SELECT 1, 'GEORGE AND SON'FROM DUAL UNION AL

我需要从Oracle DB中提取所有包含非标准格式或无效字符序列的客户名称,例如:(空格和标点重复)。为此,我使用了类似REGEXP_的(Customer_Name,'[[:space:[:punct:]]{2,})表达式

但是我需要允许一些例外情况,比如一些空格和标点重复是可以接受的。试图在“NOT”运算符后插入它们(请参见我的代码)

我正在使用下面的代码:

WITH T (id, col) AS (
  SELECT 1, 'GEORGE AND SON'FROM DUAL UNION ALL
  SELECT 2, 'GEORGE P. SON'FROM DUAL UNION ALL
  SELECT 3, 'GEORGE P . SON'FROM DUAL UNION ALL
  SELECT 4, 'GEORGE - P. SON'FROM DUAL UNION ALL
  SELECT 5, 'GEORGE - P . SON'FROM DUAL UNION ALL
  SELECT 6, 'GEORGE- P. SON'FROM DUAL UNION ALL
  SELECT 7, 'GEORGE P, SON'FROM DUAL UNION ALL
  SELECT 8, 'GEORGE P , SON'FROM DUAL UNION ALL
  SELECT 9, 'GEORGE - AUTO . SON'FROM DUAL UNION ALL
  SELECT 10, 'GEORGE P. & SON' FROM DUAL UNION ALL
  SELECT 11, 'GEORGE P.&SON' FROM DUAL)

SELECT *
FROM T

WHERE    
        REGEXP_LIKE(col, '[[:space:][:punct:]]{2,}') AND
                    --Exclusions:
                    NOT (REGEXP_LIKE(col, '[[:upper:]]+\. \w') OR   
                         REGEXP_LIKE(col, '[[:upper:]]+ \& \w') OR   
                         REGEXP_LIKE(col, '[[:upper:]]+\, \w') OR
                         INSTR(col, ' - ') > 0                       
                        )            

ORDER BY id
;
我的问题是,这个正则表达式只带来Id(3、8、10和11),但也应该带来(5、6和9),如下所述:

5-'乔治-p。儿子:有个例外“-”但是“无效(spc和点重复)

6-“GEORGE-p.SON”:有例外“p.”,但“-”无效(spc和点重复)

9-'乔治-汽车。儿子:有个例外“-”但是“无效(spc和点重复)

我需要知道,我如何对我的generalRegex'[[:space:[:punct:]]{2,}字符类进行例外。 在我的代码中,当常规“规则”和“异常”都存在于同一个字符串中时,这个正则表达式不会像预期的那样工作,就像Id(5、6和9)的情况一样


非常感谢您的帮助。

我昨天告诉过您这是不可能的,请不要每天都重复同样的问题。是的,Wiktor,谢谢您的回答。但有些人可以有一个我们都看不到的解决方案,至少现在……可能还有另一个解决方案,但您的需求仅与regex相关,您希望限制一个通用模式。这需要Oracle正则表达式引擎不支持的环顾。因此,您可能会在这里使用几个正则表达式,但肯定不会使用单个正则表达式解决方案。我没有看到一个正则表达式解决方案,因为没有。。。除非Oracle SQL将切换到其他正则表达式引擎,就像MySQL一样,它现在使用从v.8开始的ICU正则表达式。如果有人(我知道)知道如何使用正则表达式,那么它就是@Wiktor。如果他说不可能,那么——在我看来——我相信这实际上是可能的,但根本不可能。是的,这里可能确实存在一些解决办法,我会试试我的手。