amolip: Ein kleines Regex-Rätsel

Beitrag lesen

Hallo Marko,

»»Ist nicht wirkungslos, es leitet einen Konditionsblock ein. (?(if)then|else).

Ok :-), ich drück's mal so aus:

(?=(?(?!.)d|(?P<a>e))) <=> (?=(?!.)d|(?P<a>e))

Und nun zu »ge« in »regex«. Wollte man dies in Worten beschreiben, müsste man die Romanform wählen ;-)
Den Bezugstext »regex« schreibe ich in Großbuchstaben, damit man besser unterscheiden kann, wann vom Bezugstext und wann vom Muster die Rede ist, also »REGEX«.

Wir haben:
(g(?=(?(?=[a-zA-Z0-9])(?P=a)|f))|(?<![^g])(?(?=[a-zA-Z0-9])(?P=a)|c)){2}

Diesen Ausdruck vereinfache ich:
(?P=a) <=> e
(?(?=[a-zA-Z0-9])e|f) <=> e
(?(?=[a-zA-Z0-9])e|c) <=> e

(g(?=e)|(?<=g)e){2}
Alt1 = g(?=e)
Alt2 = (?<=g)e

Er wird zwei Mal angewandt.

Beim ersten Mal sind wir vor dem »G«, also RE|GEX. »g« frisst das »G«. Der Lookahead ist für »E« wahr, frisst es aber nicht. Alt1 ist insgesamt wahr.

Beim zweiten Mal sind wir vor dem »E«, also REG|EX. Alt1 scheitert jämmerlich mit seinem »g«, also kommt Alt2 zum Zuge.
Der Lookabehind ist für »G« wahr, frisst es aber nicht. »e« frisst das »E«. Alt2 ist insgesamt wahr.

Ich denke der Rest des Gesamtmusters ist jetzt banal.

Gruß Uwe