2016-11-05 2 views
-2

Was ist die Regex zu überprüfen, ob ein Zeichen mehr als 2 Mal in einer Zeichenfolge auftritt? Beispiel: "aab" ist erlaubt, aber nicht "aaa" oder "aaba".Regex, um zu überprüfen, ob ein Zeichen mehr als X Mal in einer Zeichenfolge auftritt

Gibt es eine Möglichkeit, die Übereinstimmung nur bei gültigen Eingaben herzustellen (wenn weniger als 3 sich wiederholende Zeichen vorhanden sind), so dass die Funktion preg_match() 1 für eine gültige Eingabe zurückgibt (mit weniger als 3 sich wiederholenden Zeichen) und sonst 0?

Danke!

+0

Verwenden 'substr_count ($ str, "a")' statt regex. – Mohammad

+0

Also, wenn die Saite 'Aabaabaa' ist, ist das erlaubt, weil die Wiederholung nie mehr als 2 ist? – chris85

+0

Angegeben jetzt. Die "Aabaabaa" sollte nicht akzeptiert werden. – liberty

Antwort

1

Diese Regex würde ein Zeichen finden, das 3 mal wiederholt (oder mehr, weil die drei treffen müssen, um mehr zu bekommen).

(.)\1{2} 

Regex Demo: https://regex101.com/r/WmUPWW/1

PHP Verbrauch:

foreach(array('aaa', 'aab') as $string) { 
    if(preg_match('/(.)\1{2}/', $string)) { 
     echo $string . ' doesnt match :(' . "\n"; 
    } else { 
     echo $string . ' matches'. "\n"; 
    } 
} 

PHP Demo: https://eval.in/672382

+1

Ich liebe die Demos. Der Beweis ist im Pudding, sozusagen ;-) –

+0

Gibt es eine Möglichkeit, preg_match 1 zurückzugeben, wenn es existiert? Fragen Sie einfach, weil ich mehrere Ausdrücke durchlaufen möchte. – liberty

+0

@liberty das ist was es tut, deshalb tritt es in den bedingten ein. https://eval.in/672387 Laut Handbuch: 'preg_match() gibt 1 zurück, wenn das Muster dem angegebenen Betreff entspricht, 0 falls nicht, oder FALSE, wenn ein Fehler aufgetreten ist.' oder eine Demo, die die Rückgabe in einer Variablen speichert, https://eval.in/672389. – chris85

Verwandte Themen