PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Regex: 2 identische aufeinanderfolgende Buchstaben erkennen



supersucker
01.08.2006, 17:03
Hi,

ich verwende in perl oft und gerne regular expressions.

Nun stehe ich aber vor einem Problem, bei dem ich nicht weiterkomme, nämlich folgendes:

Ich möchte zwei identische, aufeinanderfolgende Buchstaben, also z.b.

dd
rr
tt

erkennen, nicht jedoch sowas wie

dw
rs
tu

Meiner Ansicht nach ist das mit regulären Ausdrücken nicht möglich, oder doch?

Danke für jede Anregung

P.S. bitte keine Anmerkungen, wie man das sonst programmiertechnisch lösen kann, das ist mir völlig klar, mir geht es darum zu wissen ob, und wenn ja wie man das mit regulären Ausdrücken könnte.

Xanti
01.08.2006, 17:07
(.)\1


Gruss, Xanti

supersucker
01.08.2006, 17:22
Danke Xanti,

mit Backreference ist gut.

Aber:

Gibt es auch eine Möglichkeit beliebig viele identische Zeichen zu erkennen?

Also:

Erkenne

aaa
aaaaa
aaaaaaa

aber nicht

abab
abababa

usw.

Der Haken an


(.)\1

ist das ich dahinter keine Quantoren hängen kann und somit immer nur zwei Zeichen erkenne.

P.S. Sorry, hatte in meinem ersten Post nicht erwähnt das es mir eigentlich darum ging beliebig viele identische Zeichen zu erkennen und dummerweise zwei geschrieben.

Xanti
01.08.2006, 17:29
...
...
Der Haken an


(.)\1

ist das ich dahinter keine Quantoren hängen kann und somit immer nur zwei Zeichen erkenne.
...


Warum nicht? Tu's doch einfach :)



[~]$ echo "123abcddefffghiijjjjjjjk" | perl -pe 's!(.)\1+!$1!g'
123abcdefghijk


edit: Nochmal zur Erklärung: Der Quantor bezieht sich auf \1, nicht auf den ganzen Ausdruck (.)\1. Also matche auf beliebiges Zeichen, dem eine beliebige (+) Anzahl desselben Zeichens folgt.

supersucker
01.08.2006, 17:34
Jup,

ich Held hatte in dem Beispiel mit dem ich das probiert hatte einen Fehler drin, deswegen hatte das bei mir auch nicht funktioniert.

Danke!

Wolfgang
01.08.2006, 18:39
Warum nicht? Tu's doch einfach :)



[~]$ echo "123abcddefffghiijjjjjjjk" | perl -pe 's!(.)\1+!$1!g'
123abcdefghijk


edit: Nochmal zur Erklärung: Der Quantor bezieht sich auf \1, nicht auf den ganzen Ausdruck (.)\1. Also matche auf beliebiges Zeichen, dem eine beliebige (+) Anzahl desselben Zeichens folgt.
oder so ;)

echo "123abcddefffghiijjjjjjjk" | perl -pe 's!(.)(?=\1)!!g'
123abcdefghijk

lookahead

Gruß Wolfgang