regex.h - Substitution ?
-
Hi Leute,
ich habe grad die regex.h für mich entdeckt
Welch' eine Erleichterung nicht alles selbst machen zu müssen
Doch eine Frage hätte ich dazu noch: Ist es möglich mit den RE von C zu substitutieren (ala pearl)Für Eure Antwort wäre ich sehr dankabar
Gruß
-
Nein, nicht direkt
s/match/subst/
Du kannst die Substitution recht leicht nachbilden, denn Du bekommst ja den match, den Bereich des Strings der übereinstimmt zurück. Dann musst Du den alten String in drei Teilen in einen neuen kopieren und dabei den mittleren Teil durch subst ersetzen.
-
Stimmt, vielen dak für Deine Antwort
Ich hätte noch eine Frage zu den RE selber:
Ich will den Anfang eines Links erfassen. Dies tue ich mit:#define PATTERN "<a href=(http://)?[\"?\'?]"
Doch dies funktioniert leider nicht so richtig
Wenn ich jedoch das
(http://)?
weglasse, dann funktioniert es:
"<a href=[\"?\'?]"
Was ist den an
(http://)?
falsch?
Muss ich etwa den Doppelpunkt oder die Slashes mit einem Backslash einleiten?
Gillt den(ausdruck)?
, oder muss ich für jedes Zeichen extra ein Fragezeichen nachstellen?
Für Eure Antwort wäre ich sehr dankbar.
Gruss
-
Hm, Du bist Perl-RegEx gewöhnt, richtig? Bei den POSIX-RegEx (um die es hier geht) gelten ein paar andere Regeln. U.U. sind dies:
Bei Perl-RE ist (...) ein Klammer-Ausdruck und \( sowie \) sind die Klammern als Zeichen.
Bei POSIX-RE ist es genau umgekehrt. ( und ) sind die Zeichen, und \(...\) ist ein Klammer-Ausdruck.Ähnlich verhält es sich noch mit ein paar anderen der üblichen RegEx-Zeichen, u.a. "|" wenn ich mich grad nicht völlig vertue..
-
Vielen Dank für die sehr schnelle Antwort
Ich hab Deinen Rat gefolgt, und habe das Ganze nun auf:#define PATTERN "<a href=[\"?\'?]\\(http://\\)"
berichtigt.
Es funktioniert soweitNur würde ich jetzt hinter dem letzten Klammerausdruck ein Fragezeichen postieren, da ja "http" nicht immer vorkommen muß. Leider scheint auch dies nicht zu gehen. Funktioniert das Fragezeichen nur auf einzellne Zeichen? Laut "man 7 regex" müsste es jedoch auch auf ganze Klammerausdrücke gehen.
Woran kann das liegen?
-
Auch das ? muss mit \? beschrieben werden da sonst das Zeichen an sich gemeint ist (Tip: Deine Zeichenmenge in [] meint auch das Fragezeichen als Zeichen.)
In einem kurzen Test für das letzte Stück klappte "\(http://\)\?"
-
Vielen Dank für Deine sehr Umfangreiche Hilfe
Mein (funktionierendes) Endergebnis ist nun:#define PATTERN "<a href=[\"\\?\'\\?]\\(http://\\)\\?"
Ich bin Dir sehr dankbar, dass Du Dir solche große Mühe gemacht hast, um mir zu helfen
Gruß