[英]Regex - Match Specific Character Anywhere
我正在尝试匹配由字母和特殊字符组成的字符串。
例如:
THIS!IS*A STRING
我尝试将一个(可能是笨拙的)正则表达式放在一起,以针对我想要的字符(Java)执行此操作:
"\\w{1,40}&*-*\\.*`*\\(*\\)*\\/*\\\\*!*,*\\** *"
它似乎有效,但仅当特殊字符在行尾时才有效。 有没有一种方法可以匹配它而不管位置如何?
EDIT1:
规格:
允许的字符为: AZ az 0-9 – . ' ) ( & / \\ ! , * space
AZ az 0-9 – . ' ) ( & / \\ ! , * space
。
EDIT2:
我认为越来越近:
"[\\w-.`()&/\\!,* ]+"
似乎是在给我我想要的东西,但是当我添加范围时出现异常:
"[\\w{1,40}-.`()&/\\!,* ]+"
thread "main" java.util.regex.PatternSyntaxException: Illegal character range near index 10
[\w{1,40}-.`()&/\!,* ]+
^
所以我认为我已经通过...实现了
连字符是范围char,必须位于字符类的开头或结尾。
我将范围移到了字符类之外,这似乎已经解决了如果它在字符类内部则被忽略的问题。
"[\\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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.