Hello,
der nächste Schritt ist auch geschafft!
(Ich bitte um Berichtigungen)
Code
----
$pattern = '=\bhttp://www\.([a-z0-9\-]{2,})\.tld/aktiv\.php\?domain\=\1&code\=\1\b=i';
$ergebnis = preg_match_all($pattern, $string, $_matches, PREG_PATTERN_ORDER || PREG_OFFSET_CAPTURE);
echo "string: ".htmlspecialchars(print_r($string,1))."<br>";
echo "pattern: ".htmlspecialchars(print_r($pattern,1))."<br>";
echo "Ergebnis:".htmlspecialchars(print_r($ergebnis,1))."<br>";
echo "Treffer: ".htmlspecialchars(print_r($_matches,1))."<br>";
Ausgabe
-------
string: In diesem Text steht eine URL: http://www.VARIABEL.tld/aktiv.php?domain=VARIABEL&code=VARIABEL
in der kein Umruch sein darf und hier ist der zweite Hinweis
http://http://www.VARIABEL1.tld/aktiv.php?domain=VARIABEL&code=VARIABEL, der
aber nicht gefunden werden darf. Erst der dritte ist wieder im Muster,
dass wir vorgegebenn haben:http://www.VARI.tld/aktiv.php?domain=VARI&code=VARI; Ende der Durchsage
pattern: =\bhttp://www.([a-z0-9-]{2,}).tld/aktiv.php?domain=\1&code=\1\b=i
Ergebnis:2
Treffer: Array
(
[0] => Array
(
[0] => http://www.VARIABEL.tld/aktiv.php?domain=VARIABEL&code=VARIABEL
[1] => http://www.VARI.tld/aktiv.php?domain=VARI&code=VARI
)
[1] => Array
(
[0] => VARIABEL
[1] => VARI
)
)
Das Pattern:
------------
=\bhttp://www.([a-z0-9-]{2,}).tld/aktiv.php?domain=\1&code=\1\b=i
= Patterngrenze Anfang
\b beginnt mit einer Wortgrenze
http://www Zeichen müsse vorkommen
. Punkt muss drin sein, escaped, da Steuerzeichen in Patterns
([a-z0-9-]{2,}) Backreferenz, weil dreimal gleich im Muster vorkommen muss
[a-z0-9-] Alle Zeichen von a-z, von 0-9, und der Bindestrich
weil dies _bisher_ die einzigen waren, die in Domainnamen
vorkommen durften (Großbuschtaben siehe Modifier)
fehlen jetzt aber noch die Umlaute und sonstigen neuerdings
auch erlaubten Zeichen, wie Pannen-Kot (PUNI-Code) usw.
{2,} was in der Klammer davor steht, mindestens 2 Mal
. Punkt als Zeichen im Muster
tld/aktiv Text, der drinstehen soll
. Punkt als Zeichen im Muster
php Text, der drinstehen soll
? Fragezeichen als Zeichen im Muster, muss escaped werden, weil ...
domain Text, der drinstehen soll
= Gleichheitszeichen als Zeichen im Muster, muss escaped werden,
weil es auch als Beginn- und Endezeichen für das Pattern benutzt
wurde
\1 Backreferenz, d.h., dass es gelich dem ersten Ausdruck in
runden Klammern sein muss
&code Text, der drinstehen soll
= Gleichheitszeichen als Zeichen im Muster, muss escaped werden ...
\1 Backreferenz, wie vorige
\b Wortgrenze
= Ende des Patterns
i Modifier für das Pattern, es soll case insensitive gesucht werden
Das ganze Ding müsste nun noch Pannen-Kot-fest gemacht werden und dann vielleicht auf utf-8 vorbereitet werden...
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau
Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)