2017-01-30 59 views
0

我這裏有如何更改以下模式以查找所有可能的匹配項?

String patternString = "(#)(.+?)([\\s,#.])"; 

我基本上要找到一個給定的文本字符串「#」開頭的所有單詞的Java模式。該模式匹配除最後一個單詞之外的所有單詞,如果後面跟着一個結束行。我正在使用哈希映射來存儲值。

int x = 0; 

    HashMap<Integer, String> values = new HashMap<>(); 

    while(matcher.find()) { 
     values.put(x++, matcher.group(2)); 
    } 

我試着在第三個放一個'$'符號來匹配這個組,但它似乎不起作用。我該如何調整模式以匹配所有以'#'開頭幷包含最後一個單詞的單詞?

+0

考慮'\ b'(單詞邊界)而不是'\ s',或者用'$'替代字符串錨點結尾 – CollinD

+0

使用'String patternString =「#(\\ w +)」;'並抓住'.group (1)'。 –

回答

1

除非我誤解了你的要求,它可以更簡單。我建議使用以下模式:

(#)([^\s]+) 

它匹配#後跟儘可能多的非空白字符。你必須改變你的代碼來使用組1,而不是組2,因爲我的模式沒有3組。

根據您的具體要求,您還可以使用\w而不是[^\s]來匹配任何單詞字符(相當於[a-zA-Z0-9_])。

+0

實際上,我在#之後立即需要這個詞,所以我只是繼續使用第2組。該解決方案適用於我的需要,但需要稍作修改。謝謝! –

相關問題