phpbar.de logo

Mailinglisten-Archive

[php] RegExp Frage

[php] RegExp Frage

Johannes Schlueter schlueter at phpbar.de
Mit Mar 24 18:24:54 CET 2004


Hi,

On Wednesday 24 March 2004 18:00, Christian Ruetgers wrote:
> Ich möchte die Strings zerlegen nach den Werten nach 'show_nav=' und
> 'lang='. Wenn der 'lang' Parameter nicht enthalten ist, matcht meine
> Expression nicht.
> $instring2 = '/index.php4?show_nav=test-3-fr&lang=fr';
> $instring3 = '/index.php4?show_nav=test-3-fr';
> expression: '/\/index.php4\?show_nav=(.*)(&|&)lang=(.*)/s'
>
> Ich dachte mit einem:
> expression: '/\/index.php4\?show_nav=(.*)(((&|&)lang=(.*))?)/s' müsste
> ich hinkommen, ist aber nicht so. Kann mir da bitte mal jemand den
> entscheidenden Tipp geben?

das "lang=" muss in Deinem Ausdruck jedenfalls zutreffen, damit er matcht. 
Jener Teil ist aber nicht zwangsläufig vorhanden.... Dies sollte z.B. durch 
ersetzen mit "(lang=)?" umgehbar sein, also komplett 
  '/\/index.php4\?show_nav=(.*)(&|&)(lang=)?(.*)/s' - ungetested.

Desweiten, heute im Sodnerangebot: meine parse_query-Funktion, die mag aber 
nur & und kein &ampals Trennzeichen.

<?php
function parse_query($query) {
    $retval=array();

    $parsed_url = parse_url($query);
    foreach (explode('&', $parsed_url['query']) AS $valuepair) {
        $valuepair = explode('=', $valuepair);
        $retval[$valuepair[0]] = urldecode($valuepair[1]);
    }

    return $retval;
}

$in = '/index.php4?show_nav=test-3-fr&lang=fr';
print_r(parse_query($in));
?>

Array
(
    [show_nav] => test-3-fr
    [lang] => fr
)

johannes

php::bar PHP Wiki   -   Listenarchive