Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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
Regex 如何过滤包含字符和数字组合的字符串_Regex_Oracle - Fatal编程技术网

Regex 如何过滤包含字符和数字组合的字符串

Regex 如何过滤包含字符和数字组合的字符串,regex,oracle,Regex,Oracle,我想问一下如何过滤可能包含2种模式的“产品”列: 它以3个字符“A-Z”或“A-Z”开头,后跟数字 或 例如:ABC1258、acb548796 它以字符“K”开头,后面是数字,然后是“u”,然后是其他数字 例如:K123233_06565、K435_245 谢谢这里有一个选项,它使用正则表达式 SQL> with test (col) as 2 (select 'ABC1258' from dual union all 3 select 'K435_24

我想问一下如何过滤可能包含2种模式的“产品”列:

  • 它以3个字符“A-Z”或“A-Z”开头,后跟数字 或
  • 例如:ABC1258、acb548796

  • 它以字符“K”开头,后面是数字,然后是“u”,然后是其他数字
  • 例如:K123233_06565、K435_245
    谢谢

    这里有一个选项,它使用正则表达式

    SQL> with test (col) as
      2    (select 'ABC1258'       from dual union all
      3     select 'K435_245'      from dual union all
      4     select 'AB_445'        from dual union all
      5     select 'KA234_23'      from dual union all
      6     select 'K12_BC'        from dual union all
      7     select 'XXX1243124YYY' from dual
      8    )
      9  select col
     10  from test
     11  where regexp_like(col, '^[[:alpha:]]{3}\d+$')
     12     or regexp_like(col, '^K\d+_\d+$');
    
    COL
    -------------
    ABC1258
    K435_245
    
    SQL>
    

    这里还有一种方法:

    with tab as(
      select 'ABC1258' as str from dual union all
      select 'abc548796'as str from dual union all
      select 'K123233_06565'as str from dual union all
      select 'K435_245'as str from dual union all
      select 'X435_245'as str from dual union all
      select 'A435_245'as str from dual union all
      select 'KL435_245'as str from dual 
    )
    
    select *
    from tab
    where REGEXP_LIKE (str, '^([A-Za-z]{3}[0-9]+)|(K[0-9]+_).*$');
    
    结果

    ABC1258
    abc548796
    K123233_06565
    K435_245
    

    你有没有看过像这样的支持模式匹配的
    ?你试过什么?对不起,我错了,它是oracle SQL而不是MSSQL。我试过第一个例子:[A-ZA-z]{3}[0-9]+$那么,除了一个:“你试过什么?”@phalondon你的方法不错,但是第二个
    A
    应该是小写的谢谢。我是正则表达式的初学者。因此,请您解释一下什么是[:alpha:]和d+?@phalondon-在Oracle文档中有一个管道。正如您所料,它涵盖了Oracle的正则表达式支持。不客气
    [:alpha:]
    表示字母(如
    [A-Za-z]
    ),而
    \d
    表示数字(如
    [0-9]
    )<代码>+
    表示“给我一个或多个字符”。