Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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 修复正则表达式以允许用户输入的首字母缩略词发生变化_Sql_Regex_Db2 - Fatal编程技术网

Sql 修复正则表达式以允许用户输入的首字母缩略词发生变化

Sql 修复正则表达式以允许用户输入的首字母缩略词发生变化,sql,regex,db2,Sql,Regex,Db2,用户可以通过多种方式输入“邮政信箱”的首字母缩写,如邮政信箱、邮政信箱等。邮政信箱后面总是有一个数字 我试图通过所有可能的方式获得匹配,用户可以在字符串中输入它。有时用户会在邮箱前输入一些内容,如果字符串看起来与邮箱相关,我只需要进行匹配 正在查找与下面的1-6匹配但与7-10不匹配的表达式 邮政总局信箱=邮政总局信箱,我正试图避免与之匹配。 我认为表达式必须允许在“P”之前有一个空格或没有其他字符 我已经想出了下面的方法,但它并没有跳过GPO框,或者像“PPO框”这样奇怪的东西 P{1}\s?

用户可以通过多种方式输入“邮政信箱”的首字母缩写,如邮政信箱、邮政信箱等。邮政信箱后面总是有一个数字

我试图通过所有可能的方式获得匹配,用户可以在字符串中输入它。有时用户会在邮箱前输入一些内容,如果字符串看起来与邮箱相关,我只需要进行匹配

正在查找与下面的1-6匹配但与7-10不匹配的表达式

邮政总局信箱=邮政总局信箱,我正试图避免与之匹配。 我认为表达式必须允许在“P”之前有一个空格或没有其他字符

我已经想出了下面的方法,但它并没有跳过GPO框,或者像“PPO框”这样奇怪的东西

P{1}\s?\.?O{1}\.?\s+(BOX)\s+[0-9]*

  • 邮政信箱123
  • 邮政信箱655
  • 邮政信箱155
  • 邮政信箱1
  • 邮政信箱123
  • 布拉布拉赫邮政信箱123
  • 邮政总局信箱123
  • 布拉格邮政信箱111
  • 肉牛
  • 邮政信箱122

  • 任何帮助都将不胜感激。谢谢

    像这样的怎么样

    '^\s*P[. ]*O[. ]*Box\s*[0-6]$'
    

    您可以使用反向查找
    (?(p前面没有
    G\。?
    ):

    以T(ID,STR)作为
    (
    价值观
    (1,‘邮政信箱123’)
    ,(2,‘邮政信箱655’)
    ,(3,‘邮政信箱155’)
    ,(4,‘邮政信箱1’)
    ,(5,‘邮政信箱123’)
    ,(6,‘布拉布拉赫邮政信箱123’)
    ,(7,‘邮政总局信箱123’)
    ,(8,'布拉格邮政信箱111')
    ,(9,'邮政信箱')
    ,(10,'邮政信箱122')
    ,(11,“邮政总局122号信箱”)
    )
    选择T*
    
    ,REGEXP_LIKE(STR),(?您使用的是哪种类型的SQL?对于使用IBM DB2可以使用的regex构造,这会有所不同,但我认为我可以使用任何有效的表达式…以前没有太多使用过它。这几乎可以做到,但不包括场景6,其中用户在PO框之前输入了字符串。我需要它返回“find”如果它在字符串中的任何位置,并且不能是GPO框。感谢您的解决方案和解释。非常感谢。
    WITH T (ID, STR) AS 
    (
    VALUES
      ( 1, 'PO BOX 123')
    , ( 2, 'P.O BOX 655')
    , ( 3, 'P.O. BOX 155')
    , ( 4, 'PO BOX 1')
    , ( 5, 'P O BOX 123')
    , ( 6, 'blahblah PO BOX 123')
    , ( 7, 'GPO BOX 123')
    , ( 8, 'blah G P O BOX 111')
    , ( 9, 'P O B OX')
    , (10, 'PP.O BOX 122')
    
    , (11, 'G.P.O BOX 122')
    )
    SELECT T.*
    , REGEXP_LIKE(STR, '(?<!G\.?)P\s?\.?O\.?\s+BOX\s+[0-9]*') FLAG
    FROM T
    
    |ID         |STR                |FLAG |
    |-----------|-------------------|-----|
    |1          |PO BOX 123         |true |
    |2          |P.O BOX 655        |true |
    |3          |P.O. BOX 155       |true |
    |4          |PO BOX 1           |true |
    |5          |P O BOX 123        |true |
    |6          |blahblah PO BOX 123|true |
    |7          |GPO BOX 123        |false|
    |8          |blah G P O BOX 111 |true |
    |9          |P O B OX           |false|
    |10         |PP.O BOX 122       |true |
    |11         |G.P.O BOX 122      |false|