PO BOX的正则表达式匹配

时间:2013-10-28 13:48:27

标签: regex

我需要一个匹配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时它会破坏条件!

请帮忙!

1 个答案:

答案 0 :(得分:1)

您的示例与您的说明不符。

这个怎么样?似乎开头的g.+是可选的,但是从P开始它是相同的。

^(g.+)?(p.+o.+box)$

语法至少采用“扩展”正则表达式语法,如sed -regrepPerl

您似乎在示例中使用大写但在正则表达式中使用小写。棘手的小正则表达式引擎区分大小写,因此您可能需要

^(G.+)?(P.+O.+BOX)$

甚至

/^(g.+)?(p.+o.+box)$/i

(至少在Perl中)。