gpt4 book ai didi

java -\\s 不适用于 java 正则表达式

转载 作者:行者123 更新时间:2023-11-30 03:54:42 25 4
gpt4 key购买 nike

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

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

可能的解决方案是什么?

最佳答案

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

即可解决此问题

关于java -\\s 不适用于 java 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23526646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com