2016-11-17 5 views
5

Ich versuche regexp zu erstellen dupliziert Kommas zu finden, wie hier:regexp angeben Zähler in Zeichenklasse

baz(uint32,,bool) 

Vorerst mein Muster: \w*\([\w\[\],?+]+\)

welche nicht funktioniert.

Wie kann man Mengen für Artikel in der Zeichenklasse angeben?

+3

'[,] {2}' zwei oder mehr aufeinanderfolgenden Kommas. Siehe [Java RegEx Quantifiers] (https://docs.oracle.com/javase/tutorial/essential/regex/quant.html). – nbrooks

Antwort

2

Sie können keine Anzahl von Vorkommen innerhalb einer Zeichenklasse angeben, da dieses Konstrukt zum Definieren eines bestimmten Zeichentyps verwendet wird. Innerhalb [...] werden die *, +, ?, {1,2} als Literalsymbole behandelt.

Wenn Sie müssen nur mehrere durch Komma getrennte Wörter in Klammern entsprechen, verwenden

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

oder mit obligatorischen ersten Wort:

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

die regex demo anzeigen (oder this one).

Verwenden Sie in Java String re = "\\w+\\(\\w*(?:,\\w*)*\\)";.

Musterdetails:

  • \w* - 0+ Wort Zeichen
  • \( - ein Literal (
  • \w* - 0+ Wort Zeichen
  • (?:,\w*)* - null oder mehr Sequenzen (Die und (...) definieren Sequenzen oder alternative Sequenzen, wenn | innerhalb der Gruppen verwendet wird) von einem Komma und 0+ Wort verkohlt
  • \) - ein Literal )
+0

(?: ...) - spezifisch für Java? Ich kann kein Dokument dafür finden. – Constantine

+1

Siehe [Was ist eine nicht einfangende Gruppe? Was bedeutet ein Fragezeichen gefolgt von einem Doppelpunkt (? :)? (Http://stackoverflow.com/questions/3512471/what-is-a-non-capturing-group-what-does-aquestion-mark) (gefolgt von einem Doppelpunkt). Auch [Nicht erfassbare Gruppen] (http://www.regular-expressions.info/brackets.html#noncap). Es ist ein allgemein akzeptiertes Konstrukt in NFA-Regex (nicht POSIX-1). –