【问题标题】:\\s not working with java regex\\s 不适用于 java 正则表达式
【发布时间】:2014-05-07 19:29:07
【问题描述】:

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

1234567890

123-456-7890

123.456.7890

123 456 7890

此代码适用于前三种模式。当我尝试使用 \\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)

我也尝试过 unicode 模式 \u0020 和十六进制模式 \0x20,但仍然没有成功。

//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!!");
    }
}    

对此有什么可能的解决方案?

【问题讨论】:

    标签: java regex


    【解决方案1】:

    其实问题出在其他地方。解析器将[.-\\s] 解释为范围。例如[a-z] 也会发生同样的情况,但第一个无效。只需重新订购 [-.\\s]

    即可解决此问题

    【讨论】:

    • 或者,转义 - 也可以:[.\\-\\s]
    猜你喜欢
    • 1970-01-01
    • 2011-02-13
    • 2014-09-26
    • 1970-01-01
    • 2013-03-15
    • 1970-01-01
    • 2016-10-10
    • 2013-05-01
    • 2013-09-08
    相关资源
    最近更新 更多