Java正则表达式匹配精确的SSN模式
我想从输入字符串中捕获确切的SSN模式DDD-DD-DDDD,而不是另一个模式DDD-DD-ddddd-DDDJava正则表达式匹配精确的SSN模式,java,regex,Java,Regex,我想从输入字符串中捕获确切的SSN模式DDD-DD-DDDD,而不是另一个模式DDD-DD-ddddd-DDD String line = " Hello my SSN : 111-22-3333-444 and another SSN: 333-56-3789" ; Pattern p = Pattern.compile("\\d{3}-\\d{2}-\\d{4}"); Matcher m = p.matcher(line); while(m.
String line = " Hello my SSN : 111-22-3333-444 and another SSN: 333-56-3789" ;
Pattern p = Pattern.compile("\\d{3}-\\d{2}-\\d{4}");
Matcher m = p.matcher(line);
while(m.find()) {
System.out.println(m.group() );
}
我得到的输出是
111-22-3333
333-56-3789
预期输出:333-56-3789
我尝试添加\b
边界,但仍然没有运气您可以使用
(?<!\d|\d[.-])\d{3}(?=([.-]))\1\d{2}\1\d{4}(?![.-]?\d)
添加锚点
\\d{3}-\\d{2}-\\d{4}$
分隔符可以是。或者空间,如何在这个命令中处理?(?@Sadu)你是说“匹配”分隔符,边界?然后使用Pattern.compile((?@Wiktor..需要在输入中处理不同的分隔符,如果我的输入是“你好,我的第一个SSN:11.333.56.3788,第二个SSN:333-56-3789,第三个SSN 333.56.3780”"我的输出应该是333-56-3789&333.56.3780。@Wiktor非常感谢您的帮助。我苦苦挣扎了很长时间,您救了我。上面的正则表达式在什么地方出现了中断,无法计算。请帮助..输入:第一个无效SSN:11.111.11.1111,第二个有效SSN:222-22-2222,第三个有效SSN 333.33.3333,第四个有效SSN:444 44和第五个无效SSN:d-SSN:5555555和第6个无效SSN:6666666预计输出:有效SSN:222-22-2222有效SSN:333.33.3333有效SSN:444 4444在3-2-4中仅允许带有(Hypen、Dot和whitesape)的SSNformat@Sadu您添加了一个空格,所以添加它,Pattern.compile((?)?
String line = "Hello my 1st SSN : 11.333.56.3788 , 2nd SSN: 333-56-3789 , 3rd SSN 333.56.3780" ;
Pattern p = Pattern.compile("(?<!\\d|\\d[.-])\\d{3}(?=([.-]))\\1\\d{2}\\1\\d{4}(?![.-]?\\d)");
Matcher m = p.matcher(line);
while(m.find()) {
System.out.println(m.group() );
}
// => 333-56-3789 and 333.56.3780