Regulärer Ausdruck will und will nicht passen...
summi
- php
Moin,
ich habe hier folgende Regulären ausdrücke:
/id="post-([0-9]{1,})".*title="Permanent Link to ([a-zA-Z0-9\.,_\(\)&\s;-]*)">/
/<img src="(http:\/\/[a-zA-Z0-9\.\/_,%&;-]*)".*><br \/>/
Dauer: <\/strong>([0-9:\.]*).([a-zA-Z]*).*Format: <\/strong>([a-zA-Z0-9\.-\:]*).*Gr.*e: <\/strong>([a-zA-Z0-9., ]*)/
Diese sollen auf einen Text matchen. Nun ist die Frage, wie ich aus drei ausdrücken einen machen kann, so das in ich PHP und mit preg_match_all ein array mit den einzelnen geklammerten Bereichen zurückgebkomme.
RegA.*RegB.*RegC funktioniert nicht, (RegA|RegB|RegC) liefrt nicht das gewünschte Ergebnis.
Hat jemand ideen?
Danke für eure Hilfe
Hat jemand ideen?
Nur wenn ich das zu behandelnde Material und das Ziel sehe.
Generell ist es eine schlechte Idee, mit REs auf HTML Code losgehen zu wollen. Dafür gibt es entsprechende Parser.
mfg Beat
Nur wenn ich das zu behandelnde Material und das Ziel sehe.
Daran soll es nicht scheitern.
<h1 id="post-304455"><a href="blub" rel="bookmark" title="Permanent Link to blablub"><font color="black"><b>atom rofl lol</b></font></a> </h1>
<p class="date">Sonntag, 13. Juni 2010 11:07   <a href="http://twitter.com/" title="Click to send this page to Twitter!" target="_blank"><img src="http://picload.org/image/rdrclw/twittereus0.jpg" style="border: 0pt none;margin: 0px"></a></p>
<div class="entry"><!-- the entry -->
<p>bla bla bla blub ba dasfja sfweah falkshfailwefh asdfa</p>
<p><img src="http://www.google.com/intl/de_de/lovefootball/doodle4google/img/doodles/9-doodle.jpg" alt="" /><br />
<strong>Dauer: </strong>1 min. | <strong>Format: </strong>DSA | <strong>Größe: </strong>4 MB | <a href="blub.htmö" target="_blank">blub</a><br />
Generell ist es eine schlechte Idee, mit REs auf HTML Code losgehen zu wollen. Dafür gibt es entsprechende Parser.
Problem ist, dass der Code nicht valide oder auch nur konsitent ist und die Parser sich regelmäßig verschlucken
Problem ist, dass der Code nicht valide oder auch nur konsitent ist und die Parser sich regelmäßig verschlucken
Dann korrigiere das Übel an der Wurzel statt Symptome zu kurieren.
mfg Beat
Dann korrigiere das Übel an der Wurzel statt Symptome zu kurieren.
Ähm... !? Ich habe keinen Einfluss auf die Ausgabe, die ich verarbeiten muss. deswegen wär die Lösung mittels regulärem Ausdruck das einfachste.
Schade, dass du mir nicht weiterhelfen kannst
[latex]Mae govannen![/latex]
Schade, dass du mir nicht weiterhelfen kannst
Doch, kann er.
Cü,
Kai
Schade, dass du mir nicht weiterhelfen kannst
Doch, kann er.
Soziale Kompetenz ist das, was ich am Selfhtml-Forum sooo liebe.
Gute Nacht. :)
Dann korrigiere das Übel an der Wurzel statt Symptome zu kurieren.
Ähm... !? Ich habe keinen Einfluss auf die Ausgabe, die ich verarbeiten muss. deswegen wär die Lösung mittels regulärem Ausdruck das einfachste.
Schade, dass du mir nicht weiterhelfen kannst
Könnte ich schon.
Du hast mir einen Probe des zu parsenden Materials gegeben, aber nicht gezeigt, welche relevante Information du brauchst.
mfg Beat
Hieraus brauche ich die Nummer des Posts (siehe ID), den Titel ohne "Permanent Link to", den Link zum Bild (in diesem Fall von Google) sowie die Daten zu Dauer, Format und Größe. Meine regulären Ausdrücke matchen dies Punkte auch schon. Probleme gibt es nur bei dem überspringen der "Zwischenstücke".
<h1 id="post-304455"><a href="blub" rel="bookmark" title="Permanent Link to blablub"><font color="black"><b>atom rofl lol</b></font></a> </h1>
<p class="date">Sonntag, 13. Juni 2010 11:07   <a href="http://twitter.com/" title="Click to send this page to Twitter!" target="_blank"><img src="http://picload.org/image/rdrclw/twittereus0.jpg" style="border: 0pt none;margin: 0px"></a></p>
<div class="entry"><!-- the entry -->
<p>bla bla bla blub ba dasfja sfweah falkshfailwefh asdfa</p>
<p><img src="http://www.google.com/intl/de_de/lovefootball/doodle4google/img/doodles/9-doodle.jpg" alt="" /><br />
<strong>Dauer: </strong>1 min. | <strong>Format: </strong>DSA | <strong>Größe: </strong>4 MB | <a href="blub.htmö" target="_blank">blub</a><br />
VG und danke für die Hilfe, Summi
... Probleme gibt es nur bei dem überspringen der "Zwischenstücke".
<h1 id="post-304455"><a href="blub" rel="bookmark" title="Permanent Link to blablub"><font color="black"><b>atom rofl lol</b></font></a> </h1>
<p class="date">Sonntag, 13. Juni 2010 11:07   <a href="http://twitter.com/" title="Click to send this page to Twitter!" target="_blank"><img src="http://picload.org/image/rdrclw/twittereus0.jpg" style="border: 0pt none;margin: 0px"></a></p>
<div class="entry"><!-- the entry -->
<p>bla bla bla blub ba dasfja sfweah falkshfailwefh asdfa</p><p><img src="http://www.google.com/intl/de_de/lovefootball/doodle4google/img/doodles/9-doodle.jpg" alt="" /><br />
<strong>Dauer: </strong>1 min. | <strong>Format: </strong>DSA | <strong>Größe: </strong>4 MB | <a href="blub.htmö" target="_blank">blub</a><br />
Ich schreibe in Perl.
Das Prinzip zu PHP sollte ähnlich sein.
Wir verwenden eine Callback-Funktion.
Zuerst wollen wir einen "Entry" als Einheit erkennen. Dies schicken wir dann an die Callback-Funktion zum weiteren Parsen.
~~~perl
$bad_code =~ $entry_rex and entry_sub_parse(1);
entry_sub_parse{
# dies ist eine callbackfunktion.
}
my $entry_rex = qr/
(
<h1 \s+ id="post-\d+">
.+?
<!-- \s+ the \s+ entry \s+ -->
.+?
<img \s+ src="[^"]+"
.+?
<strong>Dauer:\s*</strong>
[^|]+
\|
\s*
<strong>Format:\s*</strong>
[^|]+
\|
\s*
<strong>Größe:\s*</strong>
[^|]+
\|
\s*
<a \s+ href="[^"]".+?</a>
)
/xs;
Schau mal, ob diese REX in der Lage ist, einen Entry zu erkennen
Der modifier /x erlaubt whitspace zur Formatierung
Wenn du ihn weglässt, musst du allen Whitespace entfernen.
mfg Beat
Moin!
Schau mal, ob diese REX in der Lage ist, einen Entry zu erkennen
Der modifier /x erlaubt whitspace zur Formatierung
Wenn du ihn weglässt, musst du allen Whitespace entfernen.
Danke für deine Hilfe. Auch wenn ich den Ausdruck nicht direkt verwendet habe, so hat er mir doch sehr geholfen und mich auf ein paar andere Ideen gebracht. Hier meine Lösung die unter php funktioniert:
/<h1 id="post-([\d]+)">.+?title="Permanent Link to ([^"]+)".+?<p><img.+?src="([^"]+)".+? \/>.+?<\/strong>([^|]+).+?<\/strong>([^|]+).+?<\/strong>([^<]+)/s
Vielen Danke und Viele Grüße,
Summi
Hi,
[...] liefrt nicht das gewünschte Ergebnis.
Hat jemand ideen?
Idee: Erkenne, wie wertlos eine Aussage wie obige ist, wenn dieses ominöse „gewünschte Ergebnis“ nicht mal bekannt ist.
MfG ChrisB
Idee: Erkenne, wie wertlos eine Aussage wie obige ist, wenn dieses ominöse „gewünschte Ergebnis“ nicht mal bekannt ist.
Moin,
das Gewünschte Ergebnis ist den den drei Reglären Ausdrücken verpackt. Einzeln funktionieren sie sauber und liefern die jeweils dort formulieren Daten zurück. Das Problem ist, dass wenn ich versuche die Ausdrücke zuverketten, in dem ich sie mit .* (beliebiges Zeichen, beliebig oft) verbinde, in PHP mit preg_match_all gar nichts mehr erkannt wird.
Es kommt also nicht auf auf die Daten an, die zu parsen sind sondern viel mehr auf die Frage, wie ich die Regulären Ausdrücke verketten kann :(
Trotzdem danke