Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [RegEx] PHP-URLs ersetzen (https://www.delphipraxis.net/147703-%5Bregex%5D-php-urls-ersetzen.html)

Matze 14. Feb 2010 16:26


[RegEx] PHP-URLs ersetzen
 
Hallo,

ich habe URLs wie

Code:
http://domain.de/index.php?get=foo
Die soll nun ersetzt werden in

Code:
http://domain.de/foo/
Das mache ich über folgende RegEx:

Code:
(http://[^<>"]*?/)index\.php\?get=([a-z_]*)
Das ersetzt mir allerdings auch URLs, die weitere Parameter enthalten (bsp: ?get=foo&blubb=bla) und genau das möchte ich nicht. Wie muss ich meine RegEx ändern?
Die URL befindet sich übrigens mitten in einem String. Daher nützt mir ein "$" nichts.

Schön wäre auch, wenn das ganze mit so einer URL gehen würde:

Code:
http://localhost/website/index.php?get=foo
Also mit einem Unterverzeichnis. Doch das geht aktuell leider auch nicht.

Grüße, Matze

himitsu 14. Feb 2010 16:35

Re: [RegEx] PHP-URLs ersetzen
 
Versuche mal mit einem Lock-Before ein nachfolgendes & zu verbieten
Code:
(http://[^<>"]*?/)index\.php\?get=([a-z_]*)(?<!&)
Hey, ich glaub langsam versteh ich diese gemeinen RegEx-Dinger. :mrgreen:

Matze 14. Feb 2010 16:40

Re: [RegEx] PHP-URLs ersetzen
 
Ne, das ändert leider nichts.

himitsu 14. Feb 2010 16:45

Re: [RegEx] PHP-URLs ersetzen
 
Code:
(http://[^<>"]*?/)index\.php\?get=([a-z_]*)(?![&a-z_])

$1$2/
Stümmt, es war ja auch andersrum nötig -.-
> ein Lock-Behind
Und [a-z_] darf dann auch nicht vorkommen.

Oder über die extrem gierige Variante.
Code:
(http://[^<>"]*?/)index\.php\?get=([a-z_]*+)(?!&)

himitsu 14. Feb 2010 17:02

Re: [RegEx] PHP-URLs ersetzen
 
Zitat:

[14.02.2010 17:53] Matze: das letzte tut nicht
[14.02.2010 17:53] himitsu: müßte eigentlich
[14.02.2010 17:53] Matze: das 1. auch net
Hmmmm :gruebel:, mit 'ner ordentlichen PCRE sollte das eigentlich gehn.
http://www.regex-tester.de/uc_880_de.html
Dann ebem anders.
Code:
(http://[^<>"]*?/)index\.php\?get=([a-z_]*)([^&a-z_])

$1$2/$3
Achte hierbei aber auf den anderen ReplaceString
und am Textende darf der zu ersetzende URL-Teil auch nicht liegen.

Khabarakh 14. Feb 2010 17:07

Re: [RegEx] PHP-URLs ersetzen
 
Zitat:

Zitat von himitsu
Versuche mal mit einem Lock-Before ein nachfolgendes & zu verbieten

Richtige Idee, aber damit Matze auch was bei Google findet, nennen wir es lieber Look Ahead :zwinker: . Und das in deinem Code ist ein Look Behind :duck:

Problem dabei ist nur das Backtracking: Der Regex will dich ja nicht enttäuschen, also matcht er einfach nur "...?get=fo", schon steht dahinter kein "&" mehr :) . Machen wir ihn also wieder ein wenig dümmer durch eine Atomic Group:
Code:
(?>(http://([^<>"]*?/)+)index\.php\?get=([a-z_])*)(?!&)
(inkl. Unterverzeichnisse)

Edit: Jo, die Hälfte wurde ja schon gesagt...

Matze 14. Feb 2010 18:06

Re: [RegEx] PHP-URLs ersetzen
 
Danke für eure Hilfe. Es hat bei mir nicht funktioniert (vermutlich lag's an mir).
Mit iner anderen Lösung konnte ich mein Vorhaben jedoch umsetzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz