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