正则表达式 - 在任何地方匹配特定字符

时间:2015-06-16 11:31:39

标签: java regex

我正在尝试匹配字母和特殊字符混合的字符串。

例如:

THIS!IS*A STRING

我试图整理一个(可能是noobish)正则表达式,为我想要的字符(Java)做这个:

"\\w{1,40}&*-*\\.*`*\\(*\\)*\\/*\\\\*!*,*\\** *"

它似乎有效,但只有当特殊字符位于行尾时。无论位置如何,有没有办法匹配它?

EDIT1:

规格:

允许的字符为:A-Z a-z 0-9 – . ‘ ) ( & / \ ! , * space

EDIT2:

越来越近了我想:

"[\\w-.`()&/\\!,* ]+"

似乎是在给我我想要的东西,但当我添加一个范围时,我得到一个例外:

"[\\w{1,40}-.`()&/\\!,* ]+"
thread "main" java.util.regex.PatternSyntaxException: Illegal character   range near index 10
[\w{1,40}-.`()&/\!,* ]+
          ^

2 个答案:

答案 0 :(得分:1)

所以我认为我已经实现了......

连字符是范围字符,需要位于字符类的开头或结尾。

我将范围移到了字符类之外,这看起来已经解决了如果它在字符类中被忽略的问题。

"[\\w.`()&/\\!,* -]{1,40}+"

答案 1 :(得分:0)

您的代码运行良好:

    String s = "THIS!IS*A STRING";
    Pattern p = Pattern.compile("\\w{1,40}&*-*\\.*`*\\(*\\)*\\/*\\\\*!*,*\\** *");
    Matcher m = p.matcher(s);
    while (m.find())
        System.out.println(m.group());

结果是:

    THIS!
    IS*
    A 
    STRING

如果要使用String.matches,则应扩展模式以匹配整个字符串。

   String s = "THIS!IS*A STRING";
   System.out.println(s.matches("(\\w{1,40}&*-*\\.*`*\\(*\\)*\\/*\\\\*!*,*\\** *)*"));
   // -> true