簡體   English   中英

Java正則表達式的特殊字符

[英]Java regex for special character

我有從文本中提取#hashTag簡單方法:

private String[] buildHashTag(String str) {
        ArrayList<String> allMatches = new ArrayList<String>();
        Matcher m = Pattern.compile("(#\\w+)\\b").matcher(str);
        while (m.find()) {
            allMatches.add(m.group());
        }
        return allMatches.toArray(new String[0]);
    }

問題是如果我發送帶有特殊字符的字符串,例如字符串“POMERANČ”。

測試:INPUT:

#Orange in Czech language mean #pomeranč :-)

OUTPUT:

[#Orange]

但它是FAIL,輸出必須是[#Orange, #pomeranč] 你能告訴我,錯誤的代碼在哪里? 幫我。 謝謝。

添加Pattern.UNICODE_CHARACTER_CLASS修飾符或使用Pattern.compile("(?U)(#\\\\w+)\\\\b") 否則, \\b\\w與所有Unicode字符都不匹配。

指定此標志后,(僅限US-ASCII) 預定義字符類POSIX字符類符合Unicode技術標准#18:Unicode正則表達式附錄C:兼容性屬性。

這是一個演示

String str = "#Orange in Czech language mean #pomeranč :-)";
ArrayList<String> allMatches = new ArrayList<String>();
Matcher m = Pattern.compile("(?U)(#\\w+)\\b").matcher(str);
//                           ^^^^
while (m.find()) {
    allMatches.add(m.group());
}
System.out.println(Arrays.toString(allMatches.toArray()));

輸出: [#Orange, #pomeranč]

使用否定字符類代替

/#[^ ]+/
  • [^ ]+否定字符類,匹配空格以外的任何內容,實際上匹配字符直到下一個空格

正則表達式演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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