0

我想像这样设计字符串:

letters (in here there may be letters, numbers and whitespace)

我已经尝试过,但它不起作用。

Scanner cin = new Scanner(System.in);
String format = "^[a-zA-Z]* ([a-zA-Z_0-9\\s]*)$";
String userInput = cin.nextLine();
if (userInput.matches(format)) {
   System.out.println("Correct Patten");
} else {
   System.out.println("Incorrect Pattern");
}

提前致谢...

4

3 回答 3

3

正则表达式中的括号具有特殊含义,您需要匹配文字字符。通过在它们前面加上一个双反斜杠来转义两个括号。

于 2012-10-27T10:00:04.157 回答
2

正则表达式中的某些字符具有特殊含义,括号就是其中之一。对于它们不能被解释为一个字符,您需要使用反斜杠对其进行转义,并且由于反斜杠在 java 字符串中具有特殊含义,您需要使用反斜杠对其进行转义(总共两个)。

所以你的正则表达式应该是

String format = "^[a-zA-Z]* \\([a-zA-Z_0-9\\s]*\\)$";
于 2012-10-27T10:06:56.160 回答
1

用反斜杠转义括号,并且格式中缺少逗号:

`String format ="^[a-zA-Z]*\\s\\([a-zA-Z_0-9\\s,]*\\)";`

        String userInput = cin.nextLine();
System.out.println(userInput);
        if(userInput.matches(format)){

           System.out.println("Correct Patten");

        }else{

           System.out.println("Incorrect Pattern");

        }

    INPUT: letters (in here there may be letters, numbers and whitespace)
    OUTPUT:correct Pattern
于 2012-10-27T09:59:47.423 回答