如何在java中的正则表达式中包含空格?

如何在java中的正则表达式中包含空格?,java,regex,java.util.scanner,Java,Regex,Java.util.scanner,我正在尝试使用它,以便用户可以输入07XXXXXXXX或07XXXXXXXXXX,两者都应该可以工作,但我的正则表达式似乎不能正常工作 我已尝试添加\\d、\\s、\\w,但这些都不起作用 我的代码是: //空格应该在{3}和[0-9]之间 而(!Scanner.hasNext(“07[0-9]{9}| 07[0-9]{3}[0-9]{6}”)){ System.out.println(“\n您输入的手机号码无效。\n它应以07开头,并应包含9个附加数字。”); Scanner.nextLine

我正在尝试使用它,以便用户可以输入07XXXXXXXX或07XXXXXXXXXX,两者都应该可以工作,但我的正则表达式似乎不能正常工作

我已尝试添加\\d、\\s、\\w,但这些都不起作用

我的代码是:

//空格应该在{3}和[0-9]之间
而(!Scanner.hasNext(“07[0-9]{9}| 07[0-9]{3}[0-9]{6}”)){
System.out.println(“\n您输入的手机号码无效。\n它应以07开头,并应包含9个附加数字。”);
Scanner.nextLine();
}//结束时
程序应该同时接受07XXXXXXXX和07XXXXXXXXXX,但是当我尝试包含空格时,它不接受任何一个选项


“07[0-9]{9}”单独适用于07XXXXXXXXX,但当我添加“|07[0-9]{3}[0-9]{6}”时,这两个选项都不起作用。

如果在空格后面加一个“?问号表示空间中的“零或一”

07[0-9]{3} ?[0-9]{6}
您还可以使用括号中的数字对来给出一个范围:

07[0-9]{3} {0,1}[0-9]{6}
如果您计划允许使用其他字符,如连字符,则可以为这些字符创建字符类。这允许空格、连字符或点:

07[0-9]{3}[-. ]{0,1}[0-9]{6}
07[0-9]{3}[-. ]?[0-9]{6}
我建议你把连字符放在字符类的第一位,因为它可以被理解为“范围”的意思,就像你对0-9的理解一样。把它放在第一位并不能定义一个范围。此外,句号通常意味着“任何字符”,但在字符类中,它失去了这种特殊意义,实际上只是一个句号



删除管道旁边的空格,否则它们将被视为regex的一部分。
hasNext(regex)
测试单个令牌。由于默认分隔符包含一个或多个空格,所以如果数据中有空格,则只测试第一部分,所以正则表达式将无法匹配第二部分。也许你想把缺省定界符改为行分隔符(如<代码>使用的删除符(“\r”)< /代码>,这会使扫描器将行看作是令牌(稍后你可以将它改回来)。但是IMO更容易的写方法是“<代码>字符串编号=null”;{{数=扫描器。NestRetro();}同时((07)[09] { 3 } \[09] { 6 });。这似乎对我不起作用。这将使它成为07XXX XXXXXX?[-.]与-或一起工作。但与空格不起作用?你是在问还是在说?在空格后加一个问号表示“零或一”空格的类型,即它使空格成为可选的。您也可以将
\s
用于空格,以防您键入的空格与代码期望的空格不同-当正则表达式正在查找一个中断空格时,您是否键入了一个非中断空格?等等,是否在正则表达式引擎上使用某种标志“忽略模式中的空白”?我知道c#regex引擎可以做到这一点,我使用它并键入了07123 123123,但它不起作用,但07123456789起作用,我只使用了你所说的,没有其他