Java正则表达式求助:匹配两类特定格式数字串的正确写法
解决Java中的两个正则匹配问题
嘿,刚看到你的问题,这两个都是正则里很容易踩的小坑,我来帮你捋清楚:
问题1:匹配以79开头、9位纯数字的字符串
你原来写的^(79)\d{9}$有个长度计算错误:79已经占了2位,后面再跟\d{9}的话,总长度就变成2+9=11位了,而你要匹配的791234567是9位,自然匹配不上。
正确的正则应该是:
^79\d{7}$
或者更清晰的等效写法:
^79[0-9]{7}$
解释:79占2位,\d{7}匹配剩下的7位数字,总长度正好是9位,完美匹配你要的目标字符串。
问题2:匹配以79或78开头、10位纯数字的字符串
你原来的^(79-78)\d{10}$有两个明显问题:
(79-78)的写法不对,-在这里不是“或”的意思,它会被当成普通字符处理;要表示“79或者78”,得用|(竖线)来分隔两个前缀;- 同样是长度问题:前缀占2位,后面应该匹配8位数字,而不是10位,否则总长度会变成2+10=12位,完全不符合你的需求。
正确的正则是:
^(79|78)\d{8}$
解释:(79|78)表示匹配开头是79或者78,\d{8}匹配剩下的8位数字,总长度2+8=10位,完全符合你的要求。
如果在Java代码里使用,记得字符串中的反斜杠要转义成\\,示例代码如下:
Pattern pattern = Pattern.compile("^(79|78)\\d{8}$"); Matcher matcher = pattern.matcher("7912345678"); if (matcher.matches()) { // 匹配成功后的逻辑处理 }
内容的提问来源于stack exchange,提问作者user3194062
相关产品推荐
相关产品推荐

