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ć
相关产品推荐
相关产品推荐

