Seite 1 von 1
RegEx - metas überprüfen
Verfasst: 29.02.2008, 08:20
von chrizz
ich sitze derzeit an einem regulären Ausdruck und komm nicht wirklich weiter.
Ich will einen String auf die Existenz von dem MetaTag "nofollow" überprüfen.
So siehts bisher aus:
/(<meta name=\"robots\" content=\")_______________(\"\>)/i
Ich habe nur leider keine Ahnung, wie der Mittelteil (___) auszusehen hat.
Thepreisch ist ja dort jeder Buchstabe und "," erlaubt.
Also müsste von der Idee her: (a-zA-Z\,)+ AUSSER (nofollow) richtig sein.
Aber wie schreib ich das als RegEx?
Ein paar Tips wären net schlecht...

Verfasst:
von
Content Erstellung von
ABAKUS Internet Marketing
Ihre Vorteile:
- einzigartige Texte
- suchmaschinenoptimierte Inhalte
- eine sinnvolle Content-Strategie
- Beratung und Umsetzung
Jetzt anfragen:
0511 / 300325-0
Verfasst: 01.03.2008, 16:33
von chrizz
niemand ne Idee? So aussergewöhnlich kann das Ding doch gar nicht sein, oder?
Re: RegEx - metas überprüfen
Verfasst: 01.03.2008, 23:54
von Hasenhuf
chrizz hat geschrieben:Also müsste von der Idee her: (a-zA-Z\,)+ AUSSER (nofollow) richtig sein.
a) Soll nun nofollow drin stehen oder nicht?
b) Strings "negieren" geht nicht.
chrizz hat geschrieben:Ich will einen String auf die Existenz von dem MetaTag "nofollow" überprüfen.
So siehts bisher aus:
/(<meta name="robots" content=")_______________("\>)/i
So in etwa?
'/<meta name="robots" content=".*?nofollow.*?">/i'
Falls Du auch nach <meta name="robots" content="noindex, nofollow, no archiv"> oder ähnlichem suchen willst. Falls Du die >\< vor den >"< tatsächlich brauchst ... einfügen.
Verfasst:
von
SEO Consulting bei
ABAKUS Internet Marketing Erfahrung seit 2002
- persönliche Betreuung
- individuelle Beratung
- kompetente Umsetzung
Jetzt anfragen:
0511 / 300325-0.
Re: RegEx - metas überprüfen
Verfasst: 02.03.2008, 00:03
von CIX88
Hasenhuf hat geschrieben:
b) Strings "negieren" geht nicht.
Schau dir „negative look-ahead” und „negative look-behind” mal näher an, damit kann man einiges machen.
Verfasst: 02.03.2008, 13:38
von chrizz
danke erstmal für die Anregungen. Da gibts doch einiges zu finden.
Ziel der RegEx soll sein, den Meta-Tag Robots überprüfen, ob ein nofollow drin vorkommt. Alles andere (also noindex, index, noarchive, archive, follow) soll erlaubt sein. Es darf halt nur kein nofollow drin vorkommen....
EDIT:
ich habs jetzt mit 2 preg_match gelöst. Das sieht mir wesentlich einfacher aus, als das eine verschachtelte...^^
So siehts jetzt aus:
Code: Alles auswählen
if (preg_match("/(<meta name=\"robots\" content=\")(.*)?(\"\>)/i", $datei, $results)) {
if (preg_match("/nofollow/", $results[2])) {
Re: RegEx - metas überprüfen
Verfasst: 02.03.2008, 15:04
von Hasenhuf
CIX88 hat geschrieben:Schau dir „negative look-ahead” und „negative look-behind” mal näher an, damit kann man einiges machen.
Ich bin neulich mal auf ähnliche Konstrukte gestoßen, konnte nur nichts damit anfangen. Bisher hatte ich immer die Aussage gefunden, man könnte nur in Klassen negieren aber keine Zeichenketten.
@ chrizz, mir ist zwar nicht klar warum Du nicht
Code: Alles auswählen
if (preg_match("/<meta name="robots" content=".*?nofollow.*?"\>/i", $datei, $results)) {
echo 'nofollow vorhanden'; //oder !preg_match ohne else statt preg_match mit else
} elles {
echo 'nofollow nicht vorhanden';
}
nimmst aber wenn Du deins nimmst, um nach 'nofollow' zu suchen reicht ein stristr im zweiten if.
Verfasst: 02.03.2008, 20:31
von chrizz
@hasenhuf: danke für das Teil... habs vorhin bei dir im Posting übersehen...
klappt wunderbar!
mit RegEx muss ich mich echt nochmal irgendwann anfreunden...^^
Verfasst: 02.03.2008, 21:35
von CIX88
> Es darf halt nur kein nofollow drin vorkommen
Da könnte man vielleicht auch ohne Regex auskommen, z.B. mit stristr() oder strpos() etc...., das wäre dann etwas schneller als preg_match(). Das kann auch soweit erweitert werden, dass man nur den Header der Datei durchsucht, und nicht die ganze Datei. Vielleicht eine Überlegung wert.
Verfasst: 03.03.2008, 22:18
von Hasenhuf
chrizz hat geschrieben:mit RegEx muss ich mich echt nochmal irgendwann anfreunden...^^
Mach eins nach dem anderen. Schau Dir die Bedeutung/Wirkung der Methazeichen an (die runden Klammern z.B. habe ich lange Zeit nicht gebraucht), Klassen, Quantoren und gieriges Verhalten, das reicht schon für sehr viel und mit der Zeit lernt man dazu.
Edit: Überall wo ich hier von Klassen fasle, meine ich die Zeichenauswahlen mit []. Vordefinierten Zeichenklassen sind aber auch einen Blick wert und nicht weiter kompliziert.
Verfasst: 03.03.2008, 23:15
von Outman
Hallo,
ich würde es so machen.
Code: Alles auswählen
<?
$doc='Meta Daten';
if(preg_match("/(<meta [^>]*name=\"robots\"[^>]*>)/is", $doc, $treffer)){
if(preg_match("/nofollow/i", $treffer[1])){
echo 'nofollow in meta tags gefunden!';
}
}
?>
mfg. Nico
Verfasst: 04.03.2008, 18:45
von Hasenhuf
Naja, aber der Modifier "s" hinter dem "i" ist wirklich angebracht oder schreibt wer mehrzeilige metatags?
Bedeutung:
https://www.devmag.net/webprog/regulaere_ausdruecke.htm
Verfasst: 04.03.2008, 19:01
von Outman
Hallo,
Du glaubst nicht was ich schon alles gesehen habe.
mfg. Nico