我需要一个匹配po box或gpo box地址的正则表达式,基本上字符串的规则是:
基本上我希望规则是:
第一个字符必须是G或P,
如果第一个字符是G,则以下字符必须是字符的任意组合,后跟PO BOX
否则如果第一个字符是P,那么后面的字符必须是O BOX
例子: PO BOX, GPO BOX。 G23123PO BOX, 一切都好,
但: GO BOX, G2323O BOX, 不行吗\ n
所以我试过
^((。[G | p](显示)的 O()盒))* $
但是在这种情况下,GO BOX也是匹配,因为第二个p只是可选的,但是我不能使它成为必需的,否则当第一个字母也是p时它会破坏条件!
请帮忙!
答案 0 :(得分:1)
您的示例与您的说明不符。
这个怎么样?似乎开头的g.+
是可选的,但是从P开始它是相同的。
^(g.+)?(p.+o.+box)$
语法至少采用“扩展”正则表达式语法,如sed -r
或egrep
或Perl
。
您似乎在示例中使用大写但在正则表达式中使用小写。棘手的小正则表达式引擎区分大小写,因此您可能需要
^(G.+)?(P.+O.+BOX)$
甚至
/^(g.+)?(p.+o.+box)$/i
(至少在Perl中)。