regex
Zanda
- php
0 Lupinius0 Cheatah0 Zanda
0 Tim0 Zanda0 Texter mit x0 Texter mit x0 Zanda
0 Zanda0 Texter mit x0 Zanda
Hallo!
Jetzt mal ehrlich.. kommt ihr gut mit regex zurecht? Ich werde es soo wohl nie lernen...
Wie habt ihr euch das bei gebracht?
Bin grade auf http://www.regex-tester.de/regex.html aber selbst hier weis ich ja nicht was ich hier und da ändern muss damit ich meinen ergebnissen überhaupt näher kommen kann.
Möchte im Prinzip nur:
xyzxyz<A HREF="/what/ever/1223.htm">INHALT</A>xyzxyz usw
als
Array
(
[0] => Array
(
[0] => "/what/ever/1223.htm"
[1] => "INHALT"
)
[1] => Array ...
)
erhalten! :-)
Danke!
Zanda
Salve
Habs glücklicherweise noch nicht wirklich gebraucht^^
Aber guck dir mal das an.
Hi,
Möchte im Prinzip nur:
und warum versuchst Du, Strukturen mit einer RegExp zu analysieren? Das klappt höchstens in Einzelfällen.
Cheatah
Die Methode ist mir eigentlich egal.. Das Ergebnis ist mir wichtig :-)
Wie würdest du das denn machen :-) ?
Zanda
Hallo!
Für ein ähnliches Array-Layout eignet sich:
/.*<A\W*HREF="(.+?)">(.+?)</A>.*/
Kannst ja mal gucken, damit bekommst du die Einträge zwar nicht so, wie du willst, aber irgendwie scheine ich da mit der PHP-Funktion ein Problem zu haben, Perl bringts hier auf den Punkt! Für PHP musst du die Delemiter am Anfang/Ende weglassen!
Grüße!
<?php
error_reporting(E_ALL);
$string = <<<EOF
<a href="/what/ever/1234.htm">INHALT</a><br>Quatsch</p><a href="/what/ever/12345.htm">INHALT2</a><br>Quatsch</p>
EOF;
$pattern = '/.*<A\W*HREF="(.+?)">(.+?)</A>.*/';
preg_match_all($pattern, $string, $array);
echo '<pre>', print_r($array, true), '</pre>';
?>
bringt leider nur!:
Array
(
[0] => Array
(
)
[1] => Array
(
)
[2] => Array
(
)
)
Danke
Zanda
$pattern = '/.*<A\W*HREF="(.+?)">(.+?)</A>.*/';
' != "
Der string auf den das passen soll enthält die Zeichenfolge " nicht.
PS: Mit einem i nach dem Pattern schaltet man die Unterscheidung von Groß- und Kleinschreibung aus.
Habs
preg_match_all ('/<a\W*href="(.+?)">(.+?)</a>/i'
Na also...
Danke!
Habs
preg_match_all ('/<a\W*href="(.+?)">(.+?)</a>/i'
Nur noch als Hinweis, eventuell steht irgendwann mal nicht nur zwischen <a und href= irgendetwas, sondern auch zwischen href="..." und dem folgenden >. Eventuell steht an beiden Stellen auch irgendwan mal etwas, was Buchstaben, Zahl oder Unterstriche enthält, siehe dazu die Bedeutung von \W.
preg_match_all ('|<a [^>]*href="([^">]*)"[^>]*>(.*)</a>|',
'a<a href="b.htm">c</a>d
e<a href="f.htm">g</a>h<a href="i.htm">j</a>
k<a href="l.htm">m</a>n',
$out, PREG_PATTERN_ORDER);
print "<pre>";
print_r ($out);
print "</pre>";
doch findet dieser code leider nur einen Link pro Zeile! - Wieso?
Array
(
[0] => Array
(
[0] => c
[1] => ghj
[2] => m
)
[1] => Array
(
[0] => b.htm
[1] => f.htm
[2] => l.htm
)
[2] => Array
(
[0] => c
[1] => ghj
[2] => m
)
)
Zanda
doch findet dieser code leider nur einen Link pro Zeile!
Auch das tut er nicht, schau Dir dein Ergebnis mal richtig an.