[英]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.