2017-02-23 1 views
0

Angenommen, dass ich ein RegexMuster gegeben bin, whole_patternWie bekomme ich Muster von Gruppen in Java Regex?

Pattern p = Pattern.compile(whole_pattern); 
Matcher m = p.matcher(line); 
if (m.find()) { 
    String s1 = m.group(1); 
    String s2 = m.group(2);   
} 

Natürlich können wir String jeder Gruppe angepasst bekommen. Aber können wir das Muster jeder Gruppe in der whole_pattern Zeichenfolge erhalten? Wenn beispielsweise whole_pattern = (\\d+)(\\w+), sind die Muster der Gruppe 1 und der Gruppe 2 \\d+ bzw. \\w+.

+0

Sie können sie aus dem String analysieren, indem die Zeichen Iterieren und Öffnungs Zählen und schließenden Klammern (unter Berücksichtigung nicht einfangender Gruppen). –

+0

@AndyTurner: Haben wir einen automatischen Weg, dies zu tun? Außerdem ist viel Aufwand für das manuelle Analysieren erforderlich, wobei Fall von verschachtelten Mustern berücksichtigt wird. – Arnold

+0

wenn du mit automatisch meinst schon implementiert, bezweifle ich es. Dies ist eine ziemlich ungewöhnliche Anforderung. Verschachtelt ist nicht wirklich viel schwieriger. –

Antwort

-1

Teilen Sie Ihre Musterzeichenfolge nach) und entfernen Sie das erste Zeichen in jedem Elementh des resultierenden Arrays.

+0

Können wir dies mit verschachtelten Mustern tun? – Arnold

+0

@Arnold Google ein "Balances Parantheses Problem" –

1

Sie regexp für Regexp verwenden:

public void simpleTest() { 
    String whole_pattern = "(\\d+)(\\w+)"; 
    System.out.println(patternGroups(whole_pattern)); 
} 

private List<String> patternGroups(String patternString) { 
    List<String> result = new ArrayList<>(); 

    String pattern = "\\(([^()]+)\\)"; 
    Pattern p = Pattern.compile(pattern); 

    Matcher m = p.matcher(patternString); 
    while (m.find()) { 
     result.add(m.group(1)); 
    } 
    return result; 
} 

Ausgabe von simpleTest() Anruf wird:

[\d+, \w+] 
+0

Ja, es wird Grenzen auferlegen, welche Art von Mustern Sie verwenden können, obwohl –

+0

Es funktioniert nicht mit verschachtelten Muster. – Arnold

Verwandte Themen