首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >修正regex表达式以允许用户输入缩略词的变体

修正regex表达式以允许用户输入缩略词的变体
EN

Stack Overflow用户
提问于 2020-01-24 01:45:30
回答 2查看 55关注 0票数 0

用户可以通过多种方式输入“邮局信箱”的首字母缩写,如P.O.box、PO等。

邮箱后面总是有号码的。

我试图获得匹配的所有可能的方式,用户可以输入一个字符串。有时用户会在PO之前输入一些内容,如果字符串看起来与PO相关,我只需要匹配。

寻找与下面的1-6匹配但与7-10不匹配的表达式。

G.P.O.box=邮政总局信箱,而我正在努力避免与之匹配。我认为表达式必须允许空白或没有其他字符之前的'P‘。

我想出了下面的内容,但它不是跳过GPO盒,也不是跳过PPO盒之类的奇怪的东西。

代码语言:javascript
复制
P{1}\s?\.?O{1}\.?\s+(BOX)\s+[0-9]*

regex.com

  1. 信箱123
  2. P.O方框655
  3. P.O.方框155
  4. 信箱1
  5. P O方框123
  6. blahblah PO BOX 123
  7. GPO方框123
  8. blah G P O BOX 111
  9. P O B牛
  10. PP.O方框122

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-24 07:41:12

您可以使用负查找后面的(?<!G\.?)P (P前面没有G\.?):

代码语言:javascript
复制
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|
票数 0
EN

Stack Overflow用户

发布于 2020-01-24 01:50:06

像这样的怎么样?

代码语言:javascript
复制
'^\s*P[. ]*O[. ]*Box\s*[0-6]$'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59889399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档