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

时间:2016-05-23 13:09:39

标签: java regex

我想在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 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

我认为你只是错过了角色类的空间 - 因为你在文字中提到了^[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();

答案 2 :(得分:0)

请注意*量词将使其与所有内容匹配的事实,包括无匹配(0或更多次,如空行或空标记"",无限。

如果您使用+ "[\w\d\s-\]+",它将匹配一个或多个(请考虑在Java Regex代码中为每个\\使用\,如下所示:" [\\w\\d\\s-]+"

考虑*是数量运算符,其作用为{0, }+的作用类似于{1, }