簡體   English   中英

正則表達式-隨處匹配特定字符

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM