2016-11-17 85 views
5

指定櫃檯我想創建正則表達式查找重複的逗號,喜歡這裏:正則表達式中的字符類

baz(uint32,,bool) 

現在我的模式是:\w*\([\w\[\],?+]+\)

這是行不通的。

如何指定字符類中的項目的數量?

+3

'[,] {2,}'兩個或更多連續的逗號。請參見[Java RegEx Quantifiers](https://docs.oracle.com/javase/tutorial/essential/regex/quant.html)。 – nbrooks

回答

2

您不能指定字符類中的出現次數,因爲此構造用於定義特定的字符類型。在[...]內,*,+,?,{1,2}被視爲文字符號。

如果您只是需要匹配括號內的數個逗號分隔的單詞,使用

\w*\(\w*(?:,\w*)*\) 

或強制性的第一個字:

\w+\(\w*(?:,\w*)*\) 
^

regex demo(或this one)。

在Java中,使用String re = "\\w+\\(\\w*(?:,\\w*)*\\)";

圖案的詳細資料

  • \w* - 0+字字符
  • \( - 一個字面(
  • \w* - 0+字字符
  • (?:,\w*)* - 零個或更多序列(?:...)(...)定義了序列或可選序列如果|在組內使用)的逗號和0+字字符
  • \) - 字面)
+0

(?:...) - 特定於Java?找不到任何文檔。 – Constantine

+1

請參閱[什麼是非捕獲組?問號後跟冒號(?:)是什麼意思?](http://stackoverflow.com/questions/3512471/what-is-a-non-capturing-group-what-does-a-question-mark -followed逐一個冒號)。此外,[非捕獲組](http://www.regular-expressions.info/brackets.html#noncap)。它是NFA正則表達式(非POSIX之一)中被廣泛接受的構造。 –