Mailinglisten-Archive |
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