2016-05-26 5 views
0

Wie kann ich zwei beliebige Buchstaben finden, die mindestens zweimal in der Zeichenkette ohne Überlappung erscheinen?Wie finde ich zwei beliebige Buchstaben, die mindestens zweimal in der Zeichenkette ohne Überlappung erscheinen?

Zum Beispiel, in der Zeichenfolge 'adjkoedjeoieadkkji' sollte ich ad finden, weil es zweimal passiert.

In der Zeichenfolge 'adjkobbbeoieadkkji' sollte ich nicht bb finden, weil die beiden Vorkommen überlappen.

Ich habe mit /^([a-z]{2}).*(\1)$/ versucht, es passt nur 'abab' noch von meiner Seite versucht, mir bitte jemand Experten in regex

+0

@randy i'have verwenden, um die Frage – jenuine

+1

Check bearbeitet ** [diese] (https://regex101.com/r/yU1nG4/1) ** – rock321987

+2

Sie müssen die Anker entfernen oder verwenden^^ ([az] {2}). * (\ 1). * $ – rock321987

Antwort

1

Ihre Zeichenfolge endet nicht unbedingt nach der Suche nach \1. Du bekommst also nichts. Sie können

^.*?([a-z]{2}).*?(\1).*$ 

Regex Demo

+0

Wie wird das verwendet, um aus der Zeichenfolge 'adjkobbbeoieadkkji' als Ergebnis' ad' zu erhalten? – SubOptimal

+0

@SubOptimal können Sie erarbeiten? – rock321987

+0

@SubOptimal redest du darüber, alle wiederholten Zeichen zu finden? – rock321987

0

helfen diese den Trick tun sollten:

public static final Pattern REGEX = Pattern.compile("((\\w\\w))(?=.*\\1)"); 

public static void main(String[] args) throws Exception { 
    String s = "adjkoedjeoieadddkkji"; 
    Matcher m = REGEX.matcher(s); 
    while (m.find()) { 
     System.err.println(m.group()); 
    } 
} 

Nur druckt:

ad

Overlapping ddd keine ist t abgestimmt.

Verwandte Themen