用于邮政信箱验证的Java正则表达式

用于邮政信箱验证的Java正则表达式,java,regex,Java,Regex,我使用以下正则表达式进行邮政信箱模式验证- “([\\w\\s*\\w]*(P(OST)?。?\\s*((O(FF(ICE)?)?)?。?。?\\s*(B(IN | OX?))| B(IN | OX))+)[\\w\\s*\\w*” ;这是因为点匹配任何字符。您想使用\.匹配文字点 "([\\w\\s*\\W]*(P(OST)?\\.?\\s*((O(FF(ICE)?)?)?\\.?\\s*(B(IN|OX|\\.?))|B(IN|OX))+))[\\w\\s*\\W]*" 而且在我看来,它

我使用以下正则表达式进行邮政信箱模式验证-

“([\\w\\s*\\w]*(P(OST)?。?\\s*((O(FF(ICE)?)?)?。?。?\\s*(B(IN | OX?))| B(IN | OX))+)[\\w\\s*\\w*”

;这是因为点匹配任何字符。您想使用
\.
匹配文字点

"([\\w\\s*\\W]*(P(OST)?\\.?\\s*((O(FF(ICE)?)?)?\\.?\\s*(B(IN|OX|\\.?))|B(IN|OX))+))[\\w\\s*\\W]*"
而且在我看来,它看起来非常复杂。它仍然允许太多的字符串。您复制了“box”,因此它与“PBINBIN”匹配

此外,您不需要前导和尾随部分

"(P(OST)?\\.?\\s*(O(FF(ICE)?)?)?\\.?\\s*B(IN|OX|\\.?))"
这种模式仍然非常宽松,允许以非常奇怪的方式编写“邮箱”,如“POST”。离开B’。您可能应该仔细查看数据,只匹配真正出现的正字法

为了确保POB不是另一个单词的一部分,您应该使用单词分隔符。通常是
\b
,但我不确定它在Java中是否相同

"\\b(P(OST)?\\.?\\s*(O(FF(ICE)?)?)?\\.?\\s*B(IN\\b|OX\\b|\\.?))"

一般性的评论:您似乎是通过反复试验来编写代码的。这是一个糟糕的编程原则。当你处理一个像这样的启发式问题,其中必然存在误报和误报,你必须权衡两者的成本,然后从最简单的解决方案开始,直到误报结果低于可接受的水平

有效邮政信箱模式是什么?以下是一些测试结果-邮政信箱:有效邮政信箱:有效邮政信箱:有效邮政信箱:有效邮政信箱:有效邮局:无效邮政信箱:有效邮政信箱:有效邮政信箱:有效邮政信箱:有效邮政信箱:有效邮政信箱:有效邮政信箱:有效邮政信箱:无效邮政信箱:无效邮政编码:无效100,,得梅因邮政信箱:得梅因邮政信箱1000:得梅因邮政信箱1000:得梅因邮政信箱1000:得梅因邮政信箱:得梅因邮政信箱谢谢你,洛伦兹。我正在尝试您提供的解决方案,它在Java编辑器上显示无效的转义序列错误。我认为这是因为我没有将反斜杠加倍。Lorenz,我尝试了您的解决方案,但它似乎不再验证任何地址。这是一个让人绝望的希望:无效大道PMB:无效巴勃罗大道:无效邮箱123:无效邮箱:无效邮箱:无效邮箱Hi Lorenz,我想我很快就能解决这个问题了。我用了-“([\\w\\s*\\w]*(P(OST)\\\\.?\\s*((O(FF(ICE)?)?)?\\.?\\s*(B(IN | OX | OX | | | | OX | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 124*这解决了之前的问题,如坎贝尔P布劳利营地贝蒂赫本,然而,它引起了另一个问题。现在-P.O.B P.O.B.POB的验证失败