Nisbo: regexp

Moin Moin

irgendwie habe ich momentan einen kleinen Hänger :D
geht darum aus einer URL einen Parameter zu filtern

[PHP]$ref  = "http://www.domain.de/datei?sprache=deutsch&parameter=das_hier_soll_urbrig_bleiben&bla=blub&foo=bbbbbbb";
$ref2 = $ref;
$ref  = preg_replace("/www.domain.([a-z]{2,3})/datei(.*)&guterparameter=(.*)&(.*)/","<b>[URL]www.domain.\1/datei?guterparameter=\3[/URL]</b>",$ref);
echo $ref."<br>".$ref2;[/PHP]

gibt mir noch das aus:
[CODE]http://www.domain.de/datei?guterparameter=das_hier_soll_urbrig_bleiben&bla=blub[/CODE]

ich möchte aber nur:
[CODE]http://www.domain.de/datei?guterparameter=das_hier_soll_urbrig_bleiben[/CODE]

also OHNE: [B]&bla=blub[/B] hinten dran

dabei möchte ich mich jetzt NICHT auf [B]bla=[/B] festlegen, denn der querystring schaut teilweise immer anders aus

eigendlich dachte ich das:

[B]&guterparameter=(.*)&(.*)[/B]

mir nur das "suchwort" rausfiltert, also alles hinter [B]guterparameter=[/B] bis zum nächsten kaufmannsund

jemand ne idee ?

  1. Servus,

    du kannst den Url auch mit parse_url() zerlegen

    http://www.php.net/parse_url

    Das wird bestimmt schneller gehen.

  2. Hi Nisbo,

    preg_replace("/www.domain.([a-z]{2,3})/datei(.*)&guterparameter=(.*)&(.*)/","<b>[URL]www.domain.\1/datei?guterparameter=\3[/URL]</b>",$ref);
    echo $ref."<br>".$ref2;[/PHP]

    gibt mir noch das aus:
    [CODE]http://www.domain.de/datei?guterparameter=das_hier_soll_urbrig_bleiben&bla=blub[/CODE]

    Nun, überlegen wir mal - in deinem RegEx hast du guterparameter=(.*)& stehen (das = musst du übrigens nicht escapen, sofern du es nicht als Delimiter verwendest).

    Das .* sucht sich natürlich immer _so viel wie möglich_! Das ist das Grundprinzip von regulären Ausdrücken - du darfst bzw. kannst an dieser Stelle also nicht .* verwenden, weil der Punkt ja für beliebige Zeichen passt.

    Da die Parameter durch & getrennt sind musst du sagen „beliebig viele Zeichen außer &“ - das geht in regulären Ausdrücken über Zeichenklassen:

    guterparameter([^&]*)&

    Passe es auf diese Weise an, alles was danach ist kannst du dann sogar noch entfernen und es sollte funktionieren.

    MfG, Dennis.