phpbar.de logo

Mailinglisten-Archive

[php] RegEx-Problemchen ...

[php] RegEx-Problemchen ...

Niels Jäckel niels.jaeckel at silice.de
Die Jun 20 18:39:40 CEST 2006


Hallo Norbert,

> Wir nehmen mal ein konkretes Beispiel:
> <?
> $patter = '*orbert*ffer*';
> ?>
> damit soll unter anderem
> www.norbert-pfeiffer.de oder www.robert-schoeffer.com
> gefunden werden.
> Man muesste also die Sternchen gegen einen Ausdruck tauchen.
> Vielleicht irgendwie so:
> <?
> $patter = '*orbert*ffer*';
> $ersatz = '[a-z0-9\-\_\.]';
> $suchen = '/^('.str_replace('*', $ersatz, $patter).')$/';
> if (preg_match($suchen, $domain) {
>     echo 'Treffer';
> }
> ?>
> Aber das bringt erst mal nix, da ist noch was flasch ... :-(

Wenn du die Standard-Wildcards verwenden möchtest, müsstest du folgende 
Ersetzungen machen:

? -> [a-z0-9\-\_\.]
* -> [a-z0-9\-\_\.]* (da liegt sicher dein Fehler)

Ich hab dazu mal folgenden Test geschrieben:

-----
$sSuche = 'Abrakadabra';
$arrPatterns = array('Abra?adabra','*abra*','abra', 'a?ka');

foreach ($arrPatterns as $sPrePattern) {

    $sPattern = str_replace('*', '[a-z0-9\-\_\.]*', $sPrePattern);
    $sPattern = str_replace('?', '[a-z0-9\-\_\.]', $sPattern);
    $sPattern = "~$sPattern~i";

    echo "Suche von '$sPrePattern' in '$sSuche' ($sPattern). Treffer: ";

    if (preg_match($sPattern,$sSuche)) {

       echo "Ja<br>";
    }
    else {

       echo "Nein<br>";
    }
}
-----

Ausgabe:

Suche von 'Abra?adabra' in 'Abrakadabra' (~Abra[a-z0-9\-\_\.]adabra~i). 
Treffer: Ja

Suche von '*abra*' in 'Abrakadabra' 
(~[a-z0-9\-\_\.]*abra[a-z0-9\-\_\.]*~i). Treffer: Ja

Suche von 'abra' in 'Abrakadabra' (~abra~i). Treffer: Ja

Suche von 'a?ka' in 'Abrakadabra' (~a[a-z0-9\-\_\.]ka~i). Treffer: Nein



So funktioniert es also jedenfalls...


Grüße,
Niels

php::bar PHP Wiki   -   Listenarchive