Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Reguläre Ausdrücke: u.a. "Gleiches" ausdrücken (https://www.delphipraxis.net/76694-regulaere-ausdruecke-u-gleiches-ausdruecken.html)

Matze 8. Sep 2006 10:51


Reguläre Ausdrücke: u.a. "Gleiches" ausdrücken
 
Hi,

Es geht um reguläre Ausdrücke mit PHP, doch ich denke, dass müsste ja überall ähnlich sein. Ich möchte mittels regulärem Ausdruck BBCodes aus einem Text entfernen. Die BBCodes können so aufgebaut sein
  • [x]...[/x]
  • [x=...]...[/x]
  • [x="..."]...[/x]

Mit diesem regulären Ausdruck (besser habe ich es nicht hinbekommen :oops: ) wollte ich diese BBCodes entfernen:

Code:
$text = preg_replace("/\[(.*?)\](.*?)\[\/(.*?)\]/", '\\2', $text);
Man sieht gleich, dass diese Lösung sehr schlecht ist. Ich sehe 2 Nachteile darin:
  1. Wenn beim ersten (.*?) etwas anderes steht, als beim 2., dann würde das mit ersetzt werden. Solche verschachtelungen würden also nicht korrekt behandelt werden:

    Code:
    [b][i]Hallo[/i][/b]
    Ok, hierbei ginge es zufälligerweise, doch wird eben das [ b ] mit dem [ /i ] abgearbeitet und danach das [ i ] mit dem [ /b ]. Kann man überhaut so eine Gleichheit mit regulären Ausdrücken behandeln?
  2. Ich erhalte hinterher 3 Variablen (\\1, \\2 und \\3), aber ich benötige nur \\2. Man kann Parameter irgendwie vom Ergebnis "ausschließen", soweit ich mich erinnere, doch weiß ich nicht wie.

Optional müsste ich auch dieser [x=...] bzw. das [x="..."] behandeln. :gruebel:
Kennt sich da von euch jemand aus und kann mir da ein wenig helfen?

brechi 8. Sep 2006 11:13

Re: Reguläre Ausdrücke: u.a. "Gleiches" ausdrücken
 
Hallo matze,
letztes Semester hab ich gerlernt, dass die reg. Ausrücke genau die Typ-3 sprachen erkennen, d.h. die Sprachen die durch einen endlichen autoamten erkannt werden. Bei einer folge von [ b][ i] bla [ /i][ /b] was etwa das gleiche wie die Sprache abba (Palindrom) ist braucht man aber schon einen Kellerautomaten. Somit ist die Wahrscheinlichkeit ziemlich gering, dass es dafür eine reg. Expression gibt. Die Rekursivität musst du also selbst behandeln.


Edit: reg Ausdr. sind Typ3 Sprachen

Matze 8. Sep 2006 11:16

Re: Reguläre Ausdrücke: u.a. "Gleiches" ausdrücken
 
Hi brechi,

vielen Dank. Dann werde ich wohl alle BBCodes einzelnd durchgehen müssen.

uwewo 8. Sep 2006 11:16

Re: Reguläre Ausdrücke: u.a. "Gleiches" ausdrücken
 
Hallo Matze,

leider kenn ich mich in PHP fast überhaupt nicht aus.

Bin aber bei der Suche auf folgendes gestossen

<?php
$zeichenkette = 'Der schnelle braune Fuchs sprang über den faulen Hund.';

$suchmuster[0] = '/schnelle/';
$suchmuster[1] = '/braune/';
$suchmuster[2] = '/Fuchs/';

$ersetzungen[2] = 'Bär';
$ersetzungen[1] = 'schwarze';
$ersetzungen[0] = 'langsame';

echo preg_replace($suchmuster, $ersetzungen, $zeichenkette);
?>

der Link zur Seite:
preg_replace

Vielleicht könntest Du vorher die Zeile prüfen welches Suchmuster als erstes im String vorkommt,
und alle möglichen Suchmuster in einem Array ablegen.

Uwe

Matze 8. Sep 2006 11:19

Re: Reguläre Ausdrücke: u.a. "Gleiches" ausdrücken
 
Hallo Uwe!

Das Beispiel kenne ich, doch wird da eigentlich nichts mit regulären Ausdrücken gemacht, sondern einfach Wörter in einem Array durch Wörter eines anderen ersetzt. Das ist ganz praktisch, wenn man sich beispielsweise einen kleinen Highlighter schreiben will. Doch in meinem Fall hilft mir das leider nicht weiter. Mein Problem ist auch nicht die preg_replace-Funktion, sondern der reguläre Ausdruck, den ich als ersten Parameter übergeben muss. :)

Dennoch danke.

Flocke 8. Sep 2006 11:36

Re: Reguläre Ausdrücke: u.a. "Gleiches" ausdrücken
 
Wenn du sie nur entfernen und nicht noch weitere Dinge damit tun willst, dann musst du doch das passende schließende Tag überhaupt nicht finden. Wie wäre es so:
Code:
$text = preg_replace("/\[\/?[a-z][^]]*\]/", "", $text);


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz