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