Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » PHP » preg_match howto

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
22.10.2004, 00:15 Uhr
Pablo
Supertux
(Operator)


Ich versuche grad ein board-parser (wie der von www.thwboard.de) zu schreiben und wollte die Suche nach den Tags mit preg_match machen. Wenn ich zum Beispiel folgendes hab:


PHP 4:
<?php
function parse_content($content)
{

    preg_match("/\[b\]\[\/b\]/", $content, $res);
    print_r($res); /* nur ein test */
    ...
    return $content;
}
?>


und $content hat folgendes: [ b ]Hallo @ all[/ b ] ..... (wobei keine Leerzeichen zwischen b, /b und [ ] liegen) dann bekomme ich gar nix.

Wenn ich folgendes tue


PHP 4:
<?php
preg_match("/\[b\]Hallo @ all\[\/b\]/", $content, $res);
?>



dann bekomme trivialerweise [ b ]Hallo @ all[/ b ]. Wie kann ich den regulären Ausdruck für [ b ] ... [ /b ] schreiben, so dass ich alle [ b ] ... [ /b] bekomme? Irgendwie krieg ich das nicht hin. Kennt ihr eine gute Seite, wo es eine gute Erklärung gibt, wie die regulären Ausdrücke in PHP funktionieren? Bei php.net verstehe ich nicht ganz.

Danke
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
22.10.2004, 09:25 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


mit deinem ausdruck würdest du nur "leere" tags erfassen. Was du ja willst ist der Text dazwischen, also so:


PHP 4:
preg_match("/\[b\](.*)\[\/b\]/", $content, $res);



im boardparser schaut das ganze so aus:


PHP 4:
$string = preg_replace("/\[b\](.*)(\[\/b\])/Us", "<b>\\1</b>", $string);



für Us hier der Auszug aus PHP-Manual:


Zitat:

U (PCRE_UNGREEDY)
This modifier inverts the "greediness" of the quantifiers so that they are not greedy by default, but become greedy if followed by "?". It is not compatible with Perl. It can also be set by a (?U) modifier setting within the pattern.

s (PCRE_DOTALL)
If this modifier is set, a dot metacharacter in the pattern matches all characters, including newlines. Without it, newlines are excluded. This modifier is equivalent to Perl's /s modifier. A negative class such as [^a] always matches a newline character, independent of the setting of this modifier.


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
22.10.2004, 13:18 Uhr
Pablo
Supertux
(Operator)


Ok danke. Ich weiß, dass mein Ausdruck nur leere Tags erkennt, ich wusste aber nicht, wie ich "(.*)" ausdrucken sollte.

Kennst du vielleicht eine gute Anleitung zu Regular Expression unter PHP?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
22.10.2004, 13:46 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hmm auch nicht so wirklich, ich muss bei regulären ausdrücken allgemein immer rumbasteln bis das rauskommt was ich will. Am besten ist es sich immer beispiele anzugucken
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
22.10.2004, 16:58 Uhr
Pablo
Supertux
(Operator)


Ja, das Problem glaube ich, dass die PHP Regul. Expr. ein bisschen anders als die von grep sind. Nicht alles funkt in PHP oder wenn man selber in C benutzt. Ich glaube, sie sind wie die von perl aber ich kenne mich nicht mit den regular expre. on perl aus.

Jedenfalls danke.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
22.10.2004, 20:02 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


sind nicht 100% perl-reguläre ausdrücke, heißt ja "perl compatible regular expressions"
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
22.10.2004, 20:41 Uhr
Pablo
Supertux
(Operator)


aha, ok, danke. Ich schau mir das nochmal später an.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 23.10.2004 um 20:50 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ PHP ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: