Nun, ich hoffe, der Titel ist nicht zu verwirrend. Meine Aufgabe ist es, alle X
s, die zwischen Y
und Z
liegen, zusammenzufassen (und zu ersetzen).Entsprechen alle 'X' von 'Y' bis 'Z'
Ich benutze X,Y,Z
da diese Werte zur Laufzeit variieren können, aber das ist überhaupt kein Problem.
Was ich bisher ausprobiert habe, ist dies:
pattern = ".*Y.*?(X).*?Z.*";
Welche tatsächlich funktioniert .. aber nur für eine X
. Ich kann einfach nicht herausfinden, wie alle X
s zwischen diesen "Tags" übereinstimmen.
Ich habe auch versucht diese:
pattern = @"((Y|\G).*?)(?!Z)(X)"
Aber das passt zu allen X
s, das Ignorieren der "Tags".
Was ist das richtige Muster, um mein Problem zu lösen? Vielen Dank im Voraus :)
bearbeiten
einige weitere Informationen:
X
ist eine einzige char
, Y
und Z
sind strings
Eine wirkliche Leben Test string:
Some.text.with.dots [nodots]remove.dots.here[/nodots] again.with.dots
=> Übereinstimmung .
s betw een [nodots]
und [/nodots]
(Anmerkung: verwendete ich xml-ähnliche Syntax hier, aber das garantiert nicht so kann ich leider keine einfache XML oder HTML-Parser verwenden)
Ich bin Angst, Sie müssen eine realistischere Beispiel-Zeichenfolge bereitstellen. –
Sie haben es offensichtlich versucht "? (X *)" ... oder "X" bedeutet Zeichenfolge? –
Siehe [diese Demo] (http://regexstorm.net/Tester?p=%28%3f%3a%5cG%28%3f!%5e%29%7cy%28%3f%3d%5b%5ez%5d * z% 29% 29% 5b% 5ezx% 5d *% 28x% 29 & i = + gh + y + hh + x + x + x + z). Alle 'x's sind in der Gruppe 1. Oder [this one] (http://regexstorm.net/Tester?p=y%28%3f%3a%5b%5ezx%5d*%28x%29%29*%) 5b% 5ez% 5d * z & i = + gh + y + hh + x + x + x + z). –