Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java正则表达式匹配精确的SSN模式_Java_Regex - Fatal编程技术网

Java正则表达式匹配精确的SSN模式

Java正则表达式匹配精确的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.

我想从输入字符串中捕获确切的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.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