首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java :可选匹配

Java :可选匹配
EN

Stack Overflow用户
提问于 2015-09-10 02:41:56
回答 3查看 3K关注 0票数 1

我一直在使用下面的Regex从一堆文本中提取邮政编码:

代码语言:javascript
运行
复制
    "\\d{5}\\-?[1-9]?[1-9]?[1-9]?[1-9]?"

我的意图是使最后的4-9可选(使用?)是能够提取5位邮政编码和5位邮政编码的+4如11001-1010。

然而,它只匹配前四个数字的前两个数字,即使我在末尾放了4个数字。

例如,在邮政编码11001-1010中,它将匹配11001-10。

有人知道为什么吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-09-10 03:06:53

问题的简单回答:对于邮政编码11001-1010,您的正则表达式只能与11001-1匹配,因为-后面的可选4位数不能是0

至于如何解决这个问题,这取决于您是只想匹配一个可选的+4,还是像您的表达式那样也要匹配+3、+2、+1和+0。

将Zip5与可选+4相匹配,例如匹配11001-101011001

代码语言:javascript
运行
复制
"\\d{5}(?:-\\d{4})?"

将Zip5与可选+N相匹配,例如匹配11001-101011001-10111001-1011001-111001-11001

代码语言:javascript
运行
复制
"\\d{5}(?:-\\d{0,4})?"

更新

现在,如果您想确保它与56789-1234 of 123456789-123456789abcd56789-1234qwerty不匹配,可以添加一个字边界检查:

代码语言:javascript
运行
复制
"\\b\\d{5}(?:-\\d{4})?\\b"
票数 1
EN

Stack Overflow用户

发布于 2015-09-10 02:44:42

您可以使用\\d{5}\\-\\d{0,4},它允许您在-之后将04数字匹配。

编辑

从评论中说:但那样的话-就不是可选的了。

为此,您可以使用\\d{5}(\\-\\d{0,4})?使-组和数字后的破折号可选。

票数 1
EN

Stack Overflow用户

发布于 2015-09-10 03:06:16

它在后缀的前0处停止,“d{5}-1-91-91-91-9?”因此,在您的示例中,它只匹配11001-1,"\d{5}-0-90-90-90-9?“工作还好吗?其他的答案可能更清晰,但这就是问题所在。

每个看起来都可以

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32492245

复制
相关文章

相似问题

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