Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.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正则表达式_Java_Regex - Fatal编程技术网

\\它不使用java正则表达式

\\它不使用java正则表达式,java,regex,Java,Regex,我正在尝试匹配电话号码的模式,如-: 1234567890 123-456-7890 123.456.7890 1234567890 这段代码在前三种模式下运行良好。当我尝试使用\\s在空间上进行计算时,它抛出了一个运行时异常-: Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal character range near index 12 \A\d{3}([.-\s]?)\d{3}\1\d{4}

我正在尝试匹配电话号码的模式,如-:

1234567890

123-456-7890

123.456.7890

1234567890

这段代码在前三种模式下运行良好。当我尝试使用
\\s
在空间上进行计算时,它抛出了一个运行时异常-:

Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal character range near index 12

\A\d{3}([.-\s]?)\d{3}\1\d{4}\Z
            ^

    at java.util.regex.Pattern.error(Pattern.java:1924)
    at java.util.regex.Pattern.range(Pattern.java:2594)
    at java.util.regex.Pattern.clazz(Pattern.java:2507)
    at java.util.regex.Pattern.sequence(Pattern.java:2030)
    at java.util.regex.Pattern.expr(Pattern.java:1964)
    at java.util.regex.Pattern.group0(Pattern.java:2854)
    at java.util.regex.Pattern.sequence(Pattern.java:2018)
    at java.util.regex.Pattern.expr(Pattern.java:1964)
    at java.util.regex.Pattern.compile(Pattern.java:1665)
    at java.util.regex.Pattern.<init>(Pattern.java:1337)
    at java.util.regex.Pattern.compile(Pattern.java:1022)
    at Regex13.main(Regex13.java:11)

解决这个问题的可能办法是什么呢?

事实上,问题在于其他地方。解析器将
[.-\\s]
解释为范围。例如,
[a-z]
也会发生同样的情况,但第一个是无效的。只需重新排序即可解决此问题。
[-.\\s]

或者,对
-
进行转义也同样有效:
[.\-\\s]
//validating phone numbers
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Regex13
{
    public static void main(String ...arg)
    {
        System.out.println("Enter phone number:");
        String phoneNumber=new java.util.Scanner(System.in).next();
        String patt="\\A\\d{3}([.-\\s]?)\\d{3}\\1\\d{4}\\Z";
        Pattern p=Pattern.compile(patt);
        Matcher m=p.matcher(phoneNumber);
        if(m.find())
            System.out.println("Valid phone number!!");
        else
            System.out.println("Invalid phone number!!");
    }
}