有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

regex如何在java中编写和使用正则表达式

我想用java编写一个正则表达式,它将接受包含字母、数字和空格的字符串

字符串应仅包含上述字符,而不包含其他特殊字符。如何用java编写正则表达式

我尝试了以下方法,当我将其作为java应用程序运行时,它可以正常工作

但当我在web应用程序中运行并通过XML接受值时,它接受“/”

 String test1 = null;

 Scanner scan = new Scanner(System.in);
 test1 = scan.nextLine();

 String alphaExp = "^[a-zA-Z0-9-]*$";

 Pattern r = Pattern.compile(alphaExp);
 Matcher m = r.matcher(test1);

 boolean flag = m.lookingAt();

 System.out.println(flag);

有人能帮我吗


共 (3) 个答案

  1. # 1 楼答案

    请注意*量词将使其与所有内容匹配,包括不匹配(0次或多次,如空行或空白标记""

    如果改为使用+"^{}",它将为Java正则表达式代码中的每个\匹配一个或多个(考虑使用\\),如下所示:“[\\w\\d\\s-]+

    认为{{CD1>}是一个数量操作符,它工作为^ {CD9>},^ {< CD3>}工作得像^ {CD11>}

  2. # 2 楼答案

    我认为你只是缺少了字符类中的一个空格——因为你在文本中提到了它^[a-zA-Z0-9 -]*$

    您也可以添加Pattern.MULTILINE标志,以便指定模式处理线条的方式:

         String alphaExp = "^[a-zA-Z0-9 -]*$";
    
         Pattern r = Pattern.compile(alphaExp, Pattern.MULTILINE);
         Matcher m = r.matcher(test1);
    
         boolean flag = m.lookingAt();
    
  3. # 3 楼答案

    您可以尝试使用POSIX字符类(请参见here):

    Pattern p = Pattern.compile("^[\\p{Alnum}\\p{Space}-]*$");
    Matcher m = p.matcher("asfsdf 1212sdfsd-gf121sdg5 4s");
    boolean b = m.lookingAt();
    

    使用此正则表达式,如果传递的字符串包含字母数字或空格字符以外的任何字符,则结果将不匹配