3Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
7
7
ZUGRIFFE
478
478
EMPFEHLEN
-
Aloha, ich schon wieder

Da mir bei meinem letzten Problem toll geholfen wurde hoffe ich dass dies hier auch nicht schwer fällt.
Ich habe folgenden HTML-String extrahiert. nicht mehr und nich weniger
jaha 
ist alles in einer Tabelle, wenn auch sehr unübersichtlichHTML-Code:<td class="acontent2"><a class="tooltip">Action<span><strong>Action</strong><br />Kampf- und Gewaltszenen</span></a>, <a class="tooltip">Adventure<span><strong>Adventure</strong><br />In der Regel wird viel erlebt und/oder Darsteller reisen viel</span></a>, <a class="tooltip">Drama<span><strong>Drama</strong><br />Viele Dialoge, Konflikte als Element der Handlungs; Happy-End nicht garantiert</span></a>, <a class="tooltip">Shoujo<span><strong>Shoujo</strong><br />Inhalte eher an Mädchen gerichtet</span></a>, <a class="tooltip">SciFi<span><strong>SciFi</strong><br />Spielt in einer technisch überlegenen Zukunft/Parallelwelt</span></a>

das Ganze steckt in einer Variable ($temp)
nun möchte ich nur die Genrebezeichnungen die zwischen den strong-tags selbst stehen in ein kleines array in der Form
$g[1] = "Action"
$g[2] = "Adventure"
... usw ...
zur verfügung stehen die DOM Erwiterung und aus Erfahrung durch meine vorige Frage auch die JS_Extractor Klasse (siehe http://jacksleight.com/code). Leider reicht mein Verständnis nicht aus das ganze auf mein Problem als Antwort zu bilden. ich wäre sehr dankbar wenn ihr mir da helfen könntet
-
06.05.08 22:51 #2preg_match(), preg_match_all()PHP-Code:
<?php
$temp = <<<TEMP
<td class="acontent2"><a class="tooltip">Action<span><strong>Action</strong><br />Kampf- und Gewaltszenen</span></a>, <a class="tooltip">Adventure<span><strong>Adventure</strong><br />In der Regel wird viel erlebt und/oder Darsteller reisen viel</span></a>, <a class="tooltip">Drama<span><strong>Drama</strong><br />Viele Dialoge, Konflikte als Element der Handlungs; Happy-End nicht garantiert</span></a>, <a class="tooltip">Shoujo<span><strong>Shoujo</strong><br />Inhalte eher an Mädchen gerichtet</span></a>, <a class="tooltip">SciFi<span><strong>SciFi</strong><br />Spielt in einer technisch überlegenen Zukunft/Parallelwelt</span></a>
TEMP;
$regex = "%<strong>(.+)</strong>%Uis";
// % -> gewählter Regex-Delimiter
// <strong>... </strong> -> trivial
// (.+) -> Gruppe beliebig vieler Zeichen (mindestens eines) zwischen den Tags
// Uis -> Modifier:
// -> U ~ ungreedy, sucht also nicht nach <strong>(...</strong>)</strong> oder ähnlichen Sachen
// -> i ~ incase sensitive, ignoriere Groß- und Kleinschreibung für das Zutreffen des Regex (STRONG, strong, StRoNg werden gleichermaßen akzeptiert)
// -> s ~ singleline, Zeilenumbrüche werden ignoriert, und der Regex auf die gesamte Zeichenkette angewandt
if ( preg_match_all( $regex, $temp, $matches, PREG_PATTERN_ORDER ) ) {
// Wenn Treffer vorhanden, weise das zweite Unterarray an gewünschte Variable zu. Das erste enthält die gesamten Treffer
list( , $g ) = $matches;
var_dump( $g );
}
-
Hi!
Alternativ mit dem JS_Extractor:
(Praktische Klasse!)PHP-Code:$extractor = new JS_Extractor(file_get_contents('sample.php'));
$body = $extractor->query("body")->item(0);
$i = 0;
foreach ($extractor->query("//a") as $link) {
$output = $link->extract('span/strong');
$data[$i] = $output[0];
$i++;
}
Viele Grüße,
JackaBiologie ist das was lebt, Chemie das was kracht und Physik das, wo nichts funktioniert!
- - - - - - - - - - - - - - - -
Open Source JS-Framework für Business Web-Applications: ExtJS
-
hammergeilo =D
Vielen Dank euch beiden.
@Jacka: ich bevorzuge diese Lösung, das ganze ist wirklich toll
Wähle das, weil ich mal gehört hab das die regex-engine recht "lahm" ist wenn mans wirklich nur wegen kleinigkeiten wie diesen braucht
@MaeTimmae: ich muss mir unbedingt deine Kommentare zu Gemüte führen, ich glaub die helfen mir gut dabei das ganze Regex zu verstehen
Vielen Dank auch für deine Lösung, die auch 1a funktioniert! 
Nochmals vielen Dank. Ich hoffe dass andere dies hier auch gut finden und dadurch weiterkommen =)
Eine Gute Nacht wünsche ich noch. Bei mir steht morgen schriftliche Abschlussprüfung für FI-SI an :SGeändert von nightryu (07.05.08 um 00:00 Uhr)
-
07.05.08 07:44 #5
- Registriert seit
- Oct 2007
- Ort
- Dorfen (Bayern)
- Beiträge
- 41
Sorry wenn ich mich hier kurz einmische..
Was bewirkt diese Konstellation?
Habe das noch nie gesehen und über Google findet man beim Suchbegriff "<<<TEMP" alles andere als das was man sucht
Wäre schön wenn mich jemand aufklären könnte oder einen Link hätte
PHP-Code:$temp = <<<TEMP
<td class="acontent2"><a class="tooltip">Action<span><strong>Action</strong><br />Kampf- und Gewaltszenen</span></a>, <a class="tooltip">Adventure<span><strong>Adventure</strong><br />In der Regel wird viel erlebt und/oder Darsteller reisen viel</span></a>, <a class="tooltip">Drama<span><strong>Drama</strong><br />Viele Dialoge, Konflikte als Element der Handlungs; Happy-End nicht garantiert</span></a>, <a class="tooltip">Shoujo<span><strong>Shoujo</strong><br />Inhalte eher an Mädchen gerichtet</span></a>, <a class="tooltip">SciFi<span><strong>SciFi</strong><br />Spielt in einer technisch überlegenen Zukunft/Parallelwelt</span></a>
TEMP;
-
07.05.08 11:17 #6
Das sieht natürlich um einiges hübscher aus!

Einen kleinen Verbesserungsvorschlag hätte ich aber für dein Snippet:
Ich habe mir die JS-Klasse(n) nicht nicht angeschaut, würde aber spontan darauf Tippen, dass sie entweder ebenfalls mit regulären Ausdrücken, oder über das DOM arbeitet, dessen Abarbeitung auch sehr häufig über reguläre Ausdrücke gemacht wird (sofern es kein richtiger Parser ist). Letztenendes aber sollte es bei solchen Sachen vor allem um sauberen Code gehen, und da gefällt mir die JS-Query-Lösung auch besser.PHP-Code:$extractor = new JS_Extractor(file_get_contents('sample.php'));
$body = $extractor->query("body")->item(0);
foreach ($extractor->query("//a") as $link) {
$output = $link->extract('span/strong');
// $i wird nicht benötigt, ist sogar in PHP langsamer als die generische Indexierung
$data[] = $output[0];
}

Viel Glück, sofern du es noch brauchst!
Siehe die Informationen zur Heredoc-Stringnotation in PHP, alternativ ließe sich also genauso das hier...
... tippen. Mag die Heredoc-Notation für solche Dinge aber eher, dadurch die Delimiter Anfang und Ende gut erkennbar sind.PHP-Code:$temp = "...";
-
Stimmt. So gehts auch und ist auch noch kürzer!Einen kleinen Verbesserungsvorschlag hätte ich aber für dein Snippet
Das das schneller ist wusste ich noch garnicht.
Wieder was dazu gelernt, vielen Dank!
Viele Grüße,
Jacka
P.S. nightryu, ich hoffe es läuft gerade gut bei dir! "daumendrücken"Biologie ist das was lebt, Chemie das was kracht und Physik das, wo nichts funktioniert!
- - - - - - - - - - - - - - - -
Open Source JS-Framework für Business Web-Applications: ExtJS
-
Vielen Dank, Habs grad in meinem Skript geändert!

Habs gestern geschafft, Die Fachquali war irgendwie mies =/ war einiges dran was ich nie in der schule oder auf arbeit und auch nich im IT-Handbuch finden könnte =/ Sowas wie zB Subnetting ging noch... aber Header-auslesen ausm IPv6 Header und ausm IPv4 Header is echt schon ne Härte :S
Kernquali kam wider aller Erwartungen überhauptnichts mit Datenbanken, UML, Planung, oder irgendwas programmierrelevantes dran..
Und WiSo war nur ein Mix aus den Fragen von den Prüfungen 2002-2006
"
Ich mach mir nur um die Fachquali sorgen, ansonsten gehts eigentlich. Jetz nurnoch am 26.8. die Projektpräsentation und -verteidung schaffen :o)
Ähnliche Themen
-
In einem PHP SELECT bestimmte Inhalte filtern
Von FlorianR im Forum PHPAntworten: 3Letzter Beitrag: 10.07.08, 23:11 -
String aus einem String filtern (mit Anfangs- und Endstring)
Von icy_killer im Forum PHPAntworten: 3Letzter Beitrag: 30.10.04, 20:31 -
Spalten in einem String, die durch Leerzeichen getrennt sind filtern ...
Von nappel im Forum C/C++Antworten: 0Letzter Beitrag: 20.04.04, 23:11 -
Zahlen aus einem String filtern
Von jenno im Forum PHPAntworten: 3Letzter Beitrag: 02.02.04, 15:18





Zitieren
Login






[PHP][Snippet] Array zu XML konvertieren