用户可以通过多种方式输入"邮政信箱"的首字母缩略词,如邮政信箱,邮政
信箱等。
我试图以用户在字符串中输入的所有可能方式获得匹配。有时用户会在邮政信箱之前输入一些东西,我只需要匹配字符串是否与邮政信箱相关。
查找与下面的 1-6 匹配但与 7-10 不匹配的表达式。
G.P.O. Box = General Post Office Box 我试图避免在这些方面匹配。 我认为表达式必须允许在"P"之前使用空白字符或不允许其他字符。
我想出了下面,但它没有跳过 GPO 框,或者像"PPO BOX"这样的奇怪东西
P{1}s?.?O{1}.?s+(BOX)s+[0-9]*
regex.com
- 邮政信箱 123
- 邮政信箱655
- 邮政信箱 155
- 邮政信箱 1
- 邮政信箱123
废话 邮政信箱 123
- 邮政总局信箱 123
- 等等 G P O BOX 111
- P O B OX
- PP.O 框注122
任何帮助将不胜感激。谢谢!
您可以使用负回溯(?<!G.?)P
(P 前面没有G.?
(:
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.?)Ps?.?O.?s+BOXs+[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|
这样的事情怎么样?
'^s*P[. ]*O[. ]*Boxs*[0-6]$'