Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
(Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI...

String parsen

Diskussion: String parsen im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige Hallo! Ich habe einen langen String mit Text und HTML Tags. In diesem befindet sich auch folgendes : <h2>Text</h2> ...

Antwort
Alt 22.11.10, 20:44   #1 (permalink)
 
Registriert seit: 19.08.04
Dawen Leistung: Addierstift
Likes: 1
Standard String parsen

Anzeige

Hallo!

Ich habe einen langen String mit Text und HTML Tags. In diesem befindet sich auch folgendes :

<h2>Text</h2>

Gibt es eine schöne PHP Funktion mit der ich aus dem String den Text zwischen dem ersten <h2> auslesen kann ?

Dawen ist offline   Mit Zitat antworten
Alt 22.11.10, 21:16   #2 (permalink)
Member of Honour
 
Benutzerbild von GrafZahl
 
Registriert seit: 28.05.10
GrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: Opteron
Likes: 211
Standard

wie wärs mit nem regulären ausdruck? <h2>(.*?)</h2>
__________________
Code:
:(){ :|:& };:
Veritas Aequitas
GrafZahl ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 22.11.10, 21:53   #3 (permalink)
Senior Member
 
Benutzerbild von Chakky
 
Registriert seit: 28.10.03
Chakky Leistung: 8086
Chakky eine Nachricht über ICQ schicken
Likes: 110
Standard

wenns noch mehr in die richtung gehen soll, dann schau dir mal die verschiedenen bbcode projekte an wie hier:

http://www.christian-seiler.de/projekte/php/bbcode/

(alternative projekte weiter unten können auch sehr nützlich sein)
__________________
cu
Chakky

we are dreaming in digital
we are living in realtime
we are thinking in binary
we are talking in IP
welcome to our world
Chakky ist offline   Mit Zitat antworten
Alt 22.11.10, 22:49   #4 (permalink)
Member of Honour
 
Benutzerbild von Brabax
 
Registriert seit: 04.10.01
Brabax Leistung: 8086Brabax Leistung: 8086
Brabax eine Nachricht über ICQ schicken
Likes: 42
Standard

Oder etwas komplizierter aber lustiger, mit substr und strpos

lG
__________________

<< Wir leben bereits im morgigen Gestern, doch vom gestrigen Morgen sind wir noch weit entfernt. >>

<< Träume sind Schäume. Es liegt an dir ob du sie lebst oder ein Schaumschläger bist! >>

<< Erst wenn man beginnt zu implizieren, wird man merken, dass einem sowieso keiner richtig zuhört. >>
Brabax ist offline   Mit Zitat antworten
Alt 23.11.10, 08:27   #5 (permalink)
Member of Honour
 
Benutzerbild von beavisbee
 
Registriert seit: 22.02.07
beavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium III
beavisbee eine Nachricht über ICQ schicken
Likes: 77
Standard

Zitat:
Zitat von GrafZahl Beitrag anzeigen
<h2>(.*?)</h2>
wobei "*?" keinen großen Sinn macht, oder?

.*? = (((beliebiges Zeichen) beliebig oft oder keinmal) einmal oder keinmal)

das Fragezeichen ist doch also überflüssig?


PHP-Code:
<?php
$text 
'<h1>foo</h1>
<h2>bar</h2>
<p>mooh</p>
<h2>bla</h2>
<p>blub</p>
'
;
if (
preg_match_all('/<h2>(.*)<\/h2>/i'$text$out)) {
    foreach (
$out[1] as $i => $title) {
        echo 
'Der ' . ($i+1) . '. H2-Titel lautet : ' $title '<br />' chr(10);
    }
}
?>
wenn es dann natürlich wirklich drum geht, ineinander verschachtelte Elemente auszuwerten, dann kommst du mit regulären Ausdrücken nicht mehr weiter - dann musst du entweder selbst mit strpos, substr und co parsen oder eben dir schon erwähnte Projekte wie das von Christian Seiler oder den dort genannten Alternativen anschauen.
beavisbee ist gerade online   Mit Zitat antworten
Alt 23.11.10, 11:33   #6 (permalink)
 
Benutzerbild von metax.
 
Registriert seit: 22.01.07
metax. Leistung: 8086
metax. eine Nachricht über ICQ schicken
Likes: 10
Standard

Doch, das Fragezeichen macht sehr wohl Sinn.
Wenn du dir die PCRE-Specs mal genauer anschaust, wirst du sehen, dass ein Fragezeichen nach einem Quantifier diesen von "greedy" nach "lazy" stellt, so dass der Quantifier nicht mehr die größtmögliche Zeichenmenge matcht, sondern die kleinstmögliche. Das ist wichtig, wenn du eine Sequenz von möglichen Matches hast. Ein Greedy-Quantifier matcht manchmal einfach zu viel:
Code:
preg_match_all('/<h2>(.*)<\/h2>/i', '<h2>Titel1</h2> ... <h2>Titel2</h2>', $out)
 --> 1 Match, $1 = 'Titel1</h2> ... <h2>Titel2'
preg_match_all('/<h2>(.*?)<\/h2>/i', '<h2>Titel1</h2> ... <h2>Titel2</h2>', $out)
 --> 2 Matches, erster Match: $1 = 'Titel1', 2. Match: $1 = 'Titel2'
Auch nachzulesen hier: http://de.php.net/manual/en/regexp.r...repetition.php
Zitat:
However, if a quantifier is followed by a question mark, then it becomes lazy, and instead matches the minimum number of times possible, so the pattern /\*.*?\*/ does the right thing with the C comments. The meaning of the various quantifiers is not otherwise changed, just the preferred number of matches. Do not confuse this use of question mark with its use as a quantifier in its own right. Because it has two uses, it can sometimes appear doubled, as in \d??\d which matches one digit by preference, but can match two if that is the only way the rest of the pattern matches.
Deswegen: Lieber den Pattern (.*?) verwenden. Wenn die Tags weit auseinanderliegen, klappt es zwar mit (.*) oft genausogut, weil PHP per Default ein Linefeed (\n) nicht als '.' matcht (außer mit dem PCRE_DOTALL Modifier), aber sicher ist sicher.

mfg, metax.
__________________
Wenn keiner zuschaut, teile ich heimlich durch Null!
Meine Homepage: Planet Metax | meine Bilder: DeviantArt | Twitter
metax. ist offline   Mit Zitat antworten
Alt 23.11.10, 12:05   #7 (permalink)
 
Registriert seit: 12.08.10
mime Leistung: Pentium Imime Leistung: Pentium I
Likes: 30
Standard

Zitat:
Zitat von metax. Beitrag anzeigen
Deswegen: Lieber den Pattern (.*?) verwenden.
Ich benutze das nur, wenn ich das für einen einzelnen Quantifier brauche. Wenn alle Quantifier ungreedy sein sollen, bevorzuge ich den Modifier "U". Das macht das ganze dann auch etwas leichter zu lesen...

PHP-Code:
if (preg_match_all('/<h2>(.*)<\/h2>/U'$text$out)) { 
http://php.net/manual/de/reference.p....modifiers.php

Micha
__________________
http://www.openvas.org
mime ist offline   Mit Zitat antworten
Alt 23.11.10, 12:23   #8 (permalink)
Member of Honour
 
Benutzerbild von beavisbee
 
Registriert seit: 22.02.07
beavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium III
beavisbee eine Nachricht über ICQ schicken
Likes: 77
Standard

@metax: thx. den Trick kannte ich noch nicht - dann nehm ich alles zurück und behaupte das Gegenteil
ich handhabe das bisher auch wie mime mit dem Modifier U ...
beavisbee ist gerade online   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Web, Network & Multimedia Palace » (Web-) Design und webbasierte Sprachen » PHP String parsen
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61