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



用户可以通过多种方式输入"邮政信箱"的首字母缩略词,如邮政信箱,邮政

信箱等。

我试图以用户在字符串中输入的所有可能方式获得匹配。有时用户会在邮政信箱之前输入一些东西,我只需要匹配字符串是否与邮政信箱相关。

查找与下面的 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

  1. 邮政信箱 123
  2. 邮政信箱655
  3. 邮政信箱 155
  4. 邮政信箱 1
  5. 邮政信箱123
  6. 废话 邮政信箱 123

  7. 邮政总局信箱 123
  8. 等等 G P O BOX 111
  9. P O B OX
  10. 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]$'

最新更新