2016-08-28 2 views
6

Ich verwende diese regex ^x{3}y{3}$ diese Zeichenfolge beispielsweise zu überprüfen: xxxyyy, wo die Zahl der x s ‚s die gleiche wie die Anzahl der y ist‘ (es ist in meinem Beispiel ist 3). Aber das Problem ist, dass ich weiß nicht, die Anzahl der Wiederholungen (es ist in Reichweite 0-10), so 3 hat mit etwas abstrakt ersetzt werden.Wie wird die Anzahl der Gruppentreffer mit Regex wieder verwendet?

kann ich ^x*y*$ oder ^x{0,10}y{0,10}$, verwenden, aber dies wird nicht funktionieren, wenn die Anzahl der x s ‚s aus der Anzahl der y‘ verschieden ist.

Ich bin auf der Suche nach etwas wie \1, die für die Wiederverwendung von Matched-Gruppe verwendet wird, aber in meinem Fall möchte ich die Anzahl der Gruppentreffer für x wiederverwenden.

+0

Nicht möglich in regex. Dazu benötigen Sie die Hilfe einer externen Sprache. Der Vollständigkeit halber sagen Sie, welche Regex-Engine Sie verwenden. (Ich denke, das ist eine Untergruppe des Palindrom Problems, mit nicht mit Regex gelöst werden, auch nicht. Siehe http://stackoverflow.com/questions/233243/how-to-check-that-a-string-is- a-Palindrom-mit-reguläre Ausdrücken) – Tomalak

+0

@Tomalak er gab den Link: https://regex101.com/r/rP7wB8/2 Also ich glaube, er PCRE verwendet? –

+0

@Nehal Ich weiß es nicht. Diese Verbindung ist nicht genug, um daraus eine Schlussfolgerung zu ziehen. – Tomalak

Antwort

2

Da Sie eine feste Obergrenze haben, können Sie Liste nur die Spiele aus Langschrift:

^(x{10}y{10}|x{9}y{9}|x{8}y{8}|x{7}y{7}|x{6}y{6}|x{5}y{5}|x{4}y{4}|x{3}y{3}|x{2}y{2}|xy)?$ 

(Die ? behandelt Ihre „Null jeder“ Fall.)

Klar, wenn x und y in der Praxis lange ist, dann wird es hier viele Wiederholungen sein. Ein anderer Ansatz wäre, wiederholt xy durch eine leere Zeichenfolge zu ersetzen und zu prüfen, ob Sie eine leere Zeichenfolge erhalten (da Sie jedes Mal, wenn Sie ein Paar entfernen, ein weiteres Paar zusammenbringen).

+0

Danke, aber 10 war nur zum Beispiel, ich muss überprüfen, was ist die tatsächliche Obergrenze, aber es ist über 100 mit sicher – Termininja

+1

@Termininja Sie können diesen Ausdruck automatisch generieren, so dass es egal ist, wie viele Wiederholungen Sie erwarten. – Tomalak

+0

Pragmatische Annäherung, sehr nett. – Tomalak

Verwandte Themen