You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java正则表达式匹配‘FirstName LastName - Number/Number’格式求助

解决Java正则校验姓名-数字格式的问题

我来帮你搞定这个正则匹配的小问题!你已经离成功很近了,只需要调整两个细节就能解决:

1. 正则表达式的优化

你的原正则逻辑是对的,主要需要补充和简化两点:

  • 添加字符串锚定符:^(匹配字符串开头)和$(匹配字符串结尾),确保整个字符串完全符合格式,而不是只匹配其中一段内容
  • 简化冗余语法:{1}是正则的默认匹配次数,可以直接省略;[0-9]可以用更简洁的\d替代

修正后的正则表达式:

^[A-Z][a-z]+ [A-Z][a-z]+ - \d{2}/\d{2}$

如果后续需要支持更复杂的姓名格式(比如带空格的中间名Mary Ann Smith,或者含特殊字符的姓名John O'Neil),可以再针对性调整正则,但针对你给出的示例,上面的版本完全够用。

2. 代码中匹配方法的调整

你的代码里用了m.find(),这个方法的作用是在字符串里找任意一段匹配的子串,但我们需要的是校验整个字符串是否严格符合格式,这时候应该换成m.matches()方法。

修正后的完整代码:

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Regex {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while(true){
            System.out.println("Enter the regular expression");
            Pattern p = Pattern.compile(scan.nextLine());
            System.out.println("Enter the matcher");
            Matcher m = p.matcher(scan.nextLine());
            // 替换find()为matches(),校验整个字符串是否完全匹配
            boolean success = m.matches();
            System.out.println(success);
        }
    }
}

测试验证

用你的示例字符串John John - 66/25测试:

  • 输入修正后的正则^[A-Z][a-z]+ [A-Z][a-z]+ - \d{2}/\d{2}$
  • 输入匹配字符串John John - 66/25
  • 控制台会输出true,完全符合预期

内容的提问来源于stack exchange,提问作者Benjamin Bajić

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:40:17