phpbar.de logo

Mailinglisten-Archive

[php] preg_replace Problem

[php] preg_replace Problem

Oliver Schaedlich just_oliver at gmx.net
Sam Jan 26 23:19:42 CET 2008


Hello Marcel,

> $text = '
> <a href="foo.php">link1</a><br>
> <a href="foo.php?foo=bar">link2</a><br>';

> $suchmuster = '/href="(.*?)"/is';
> $text = preg_replace($suchmuster,
> "/href=\"$1".(!stristr("$1","?")? "?" :
> "&")."foo2=bar2\" ", $text);

das ist mit preg_replace_callback() wesentlich sauberer zu lösen.
Vorschlag:

$text = '<a href="foo.php">link1</a><br>
<a href="foo.php?foo=bar">link2</a><br>';

$text = preg_replace_callback(
    '/href="[^?"]+([^"]*)/', // sucht Link und merkt sich den 'query-string'
    'fuege_parameter_hinzu',
    $text
);

function fuege_parameter_hinzu ( $fund ) {
    // wenn der 'query-string' gefunden wurde, ist er in $fund[1] 
    // (entspricht dem ersten Klammernpaar im Ausdruck)
    if ( empty( $fund[1] ) ) {
        return $fund[0] . '?foo=bar';
    } else {
        return $fund[0] . '&foo=bar';
    }
}

Grüße,
oliver


php::bar PHP Wiki   -   Listenarchive