Lazy Quantifier in PRXCHANGE nicht möglich?
Hallo Freunde,
ich habe folgendes Problem:
Ich möchte in einer PRXCHANGE-Funktion auf den ersten Capture Buffer zugreifen und das Ergebnis weiter verwenden. Der Reguläre Ausdruck dafür benutzt einen Lazy Quantifier, da ich sonst zu viel des Strings erhalte.
Den RA habe ich mit PRXMATCH und PRXPOSN überprüft und er schlägt auch beim richtigen Textteil an. Allerdings wenn ich den selben RA in PRXCHANGE benutze, scheint der Lazy Quantifier ignoriert zu werden.
Hier ein Beispielcode:
x = 'hallo welt'; /* HTML-Code */
ad = '(<.+?>)'; /* sucht alle HTML-Tags */
rx1 = prxparse('s/' || ad || '/\1/'); /* Substitute-RA */
rx2 = prxparse('/' || ad || '/'); /* Match-RA */
/* Inhalt des ersten Capture Buffer ausgeben */
erg1 = prxchange(rx1, -1, x);
tmp = prxmatch(rx2, x);
erg2 = prxposn(rx2, 1, x);
put erg1=;
put erg2=;
run;
Ausgabe im LOG:
erg1=hallo welt erg2=
Mache ich was falsch oder funktioniert der Lazy Quantifier nicht in PRXCHANGE?
Gruß Frederik
- Anmelden oder Registrieren um Kommentare zu schreiben

Zu ersetzenden Text mit angeben
Hallo Frederik,
SAS macht genau das, was Du anweist. Es findet alle Inhalte in öffnenden und schließenden Spitzklammern und ersetzt diese durch ... den gefundenen Ausdruck. Am Text ändert sich dadurch nichts.
Um nur die Texte in den Klammern zu finden, musst Du auch noch den zu ersetzenden Text dazwischen suchen.
x = 'hallo welt'; /* HTML-Code */
ad = '(<.+?>)'; /* sucht alle HTML-Tags */
rx1 = prxparse(cats('s/', ad ,'([^<]*)/\1/')); /* Substitute-RA */
rx2 = prxparse(cats('/' , ad , '/')); /* Match-RA */
rx3 = prxparse(cats('s/', ad ,'.*/\1/')); /* Substitute-RA */
/* Text zwischen den Tags löschen */
erg1 = prxchange(rx1, -1, x);
put erg1=;
/* Inhalt des ersten Capture Buffer ausgeben */
tmp = prxmatch(rx2, x);
erg2 = prxposn(rx2, 1, x);
put erg2=;
erg3 = prxchange(rx3, 1, x);
put erg3=;
run;
erg1=
erg2=
erg3=
Schöne Grüße
Jan
Nachtrag
Ok, das Forum zeigt die HTML-Tags nicht an :)
Also im SAS-Log steht dann:
erg2=
Ein Licht geht auf
Hallo Jan,
alles klar, also bezieht sich der zu substituierende Text nur auf den gefundenen Textschnipsel und nicht auf den ganzen String. Ist eigentlich auch logisch. War aber in meinen bisherigen Szenarien nicht aufgefallen.
Vielen Dank, Jan.
Gruß Frederik