RegEX -- im Coach klappts, in Praxis nicht

  • Themenstarter Themenstarter ByeBye 8492
  • Beginndatum Beginndatum
B

ByeBye 8492

$text = "[pre]test[/pre] test";
$text = preg_match_all('\[pre]([^\"]*)\[\/pre\]', $text, $test2);


Moinsen,

ich will nen BBCODE machen. Dummerweise klappt mein Ansatz der da oben steht,
im RegEX Coach, leider aber nicht in der Praxis ... .

Also, ich will fürs erste erstma, mittels dieser nicht funktionierenden Funktion, nen PreviewText auslesen lassen.
D.h. er soll das erfassen was dazwischen steht um das dann in eine andere Variable zu fassen :).

Den BBCode werde ich nacher durch str_replace regeln, oder sollte man das auch so machen?
Naja erstma würde ich aber gerne wissen, wie man dies bewerkstelligen könnte, das er einem nur den PreText ausgibt, welcher
auch nur ein einziges mal in der News vorkommen sollte!

Muffin
 
Original geschrieben von Muffinmampfer
$text = "[pre]test[/pre] test";
$text = preg_match_all('\[pre]([^\"]*)\[\/pre\]', $text, $test2);

Versuch es einmal mal mit:
Code:
$text = "[pre]test[/pre] test";
$text = preg_match_all('/\[pre\]([^\"]*)\[\/pre\]/siU', $text, $test2);

Du hattest vergessen alles zu escpaen :)
 
Anstatt erst zu suchen, kannst du es gleich mit preg_replace() ersetzen...dazu ist es schliesslich da :)
 
Zuletzt bearbeitet:
Re: Re: RegEX -- im Coach klappts, in Praxis nicht

Original geschrieben von KoMtuR
Versuch es einmal mal mit:
Code:
$text = "[pre]test[/pre] test";
$text = preg_match_all('/\[pre\]([^\"]*)\[\/pre\]/siU', $text, $test2);


Du hattest vergessen alles zu escpaen :)

klappt bei mir leider nicht :(
 
klappt bei mir leider nicht
Natürlich klappt das. Du weisst schon, dass die gefundenen Textstellen als Array zurückgegeben werden - und zwar in der Variable $test2!
--> [phpf]preg_match_all[/phpf]

Aber wie fatalus bereits sagte, mit preg_replace bist Du besser beraten.
--> [phpf]preg_replace[/phpf]

snuu
 
Original geschrieben von snuu
Natürlich klappt das. Du weisst schon, dass die gefundenen Textstellen als Array zurückgegeben werden - und zwar in der Variable $test2!
--> [phpf]preg_match_all[/phpf]

Aber wie fatalus bereits sagte, mit preg_replace bist Du besser beraten.
--> [phpf]preg_replace[/phpf]

snuu

ich weiß, das das als Array zurückgegeben wird, habe damit ja meine TemplateKlasse geschrieben :D
 
preg_match_all() findet, wie bereits erwähnt, lediglich ein Suchmuster und speichert dies in einem Array.
Probier mal:
Code:
<pre>
<?php
$text = "[pre]test[/pre] test";
preg_match_all('/\[pre\]([^"]*)\[\/pre\]/siU', $text, $test2);
print_r($test2);
?>
</pre>
...dann siehst du, wie dieser Array aufgenbaut ist.

$text = preg_match_all(.....
Was soll denn deiner Meinung nach in $text gespeichert werden.....der Rückgabewert von preg_match_all() ist die Anzahl der Suchtreffer....also eine Zahl.
Du willst $text wohl kaum dadurch ersetzen.:rolleyes:
 
Zuletzt bearbeitet:
Mal ne andere Frage:
Habe jetzt mein BB-Code System fast abgeschlossen, in zugedessen, sollen natürlich auch alle Domains, die in einem Text vorkommen automatisch umgewandelt werden. Dafür habe ich das hier geschrieben:
Code:
          $text = preg_replace('"(((http|https){1}://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)"',"<a class=\"icontent\" href=\"\\1\" target=\"_blank\">\\1</a>", $text);

Dummerweise funktioniert das Ding "zu gut" ;). D.h. er nimmt alle Domains. Leider soll er nur die nehmen, die so im Text drinne stehen, nicht aber die, die schon durch den BB-Code umgewandelt werden, also das [ url ] dinge vorne stehen haben ;). Wie kriege ich das hin, das er nur die "]" als Umwandlungs auszieht und alle anderen nimmt?
 
Original geschrieben von fatalus
Schau dir mal den Abschnitt Rückwärts-Referenz in der RegExp-Lektüre deines Vertrauens an...damit ist das ein Leichtes:)

öhm, ich habe kein RegEXP Buch oder ähnliches :heul:

Eigentlich müssten es ja nur ein paar zeichen, sein, aber diese wollen nicht :heul:
 
Zurück