Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式-在任何位置匹配特定字符_Java_Regex - Fatal编程技术网

Java 正则表达式-在任何位置匹配特定字符

Java 正则表达式-在任何位置匹配特定字符,java,regex,Java,Regex,我试图匹配一个由字母和特殊字符组成的字符串 例: 我试着组合一个(可能是noobish)正则表达式,为我想要的字符(Java)实现这一点: 这似乎有效,但只有当特殊字符位于行的末尾时才有效。有没有一种方法可以在不考虑位置的情况下匹配它 编辑1: 规格: 允许的字符为:A-Z A-Z 0-9–.)(&/\!,*空格 编辑2: 越来越近,我想: "[\\w-.`()&/\\!,* ]+" 似乎给了我想要的,但当我添加一个范围时,我得到了一个例外: "[\\w{1,40}-.`()&

我试图匹配一个由字母和特殊字符组成的字符串

例:

我试着组合一个(可能是noobish)正则表达式,为我想要的字符(Java)实现这一点:

这似乎有效,但只有当特殊字符位于行的末尾时才有效。有没有一种方法可以在不考虑位置的情况下匹配它

编辑1:

规格:

允许的字符为:
A-Z A-Z 0-9–.)(&/\!,*空格

编辑2:

越来越近,我想:

"[\\w-.`()&/\\!,* ]+"
似乎给了我想要的,但当我添加一个范围时,我得到了一个例外:

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

    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

所以我想我是通过

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

"[\\w.`()&/\\!,* -]{1,40}+"
我将范围移到了角色类之外,这似乎已经解决了如果它位于角色类内部则被忽略的问题

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

在模式末尾添加
*
,以匹配“字符串末尾之前的任何内容”这是一个改进,但如果我希望允许的字符之一位于字符串的开头,则不起作用。然后请在问题中详细说明您希望匹配的字符,因为您的正则表达式太复杂,没有意义。您能确切地澄清一下您正试图做的事情吗?从问题I的第一句话开始'd从最简单的正则表达式开始,比如
“[\\w.!*]+”
Hi,编译是否重要?我以前做过:if(s.matches(p){true;}else{false;}@RegexNoob compile不重要。 使用哪种方法很重要。
"[\\w.`()&/\\!,* -]{1,40}+"