AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Reguläre Ausdrücke: u.a. "Gleiches" ausdrücken
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von Matze · begonnen am 8. Sep 2006 · letzter Beitrag vom 8. Sep 2006
Antwort Antwort
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#1

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

  Alt 8. Sep 2006, 11:51
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 ) 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.
Kennt sich da von euch jemand aus und kann mir da ein wenig helfen?
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#2

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

  Alt 8. Sep 2006, 12:13
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
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#3

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

  Alt 8. Sep 2006, 12:16
Hi brechi,

vielen Dank. Dann werde ich wohl alle BBCodes einzelnd durchgehen müssen.
  Mit Zitat antworten Zitat
uwewo

Registriert seit: 14. Jul 2004
Ort: Karlsruhe
479 Beiträge
 
Delphi 2006 Professional
 
#4

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

  Alt 8. Sep 2006, 12:16
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
Uwe
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#5

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

  Alt 8. Sep 2006, 12:19
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.
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

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

  Alt 8. Sep 2006, 12:36
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);
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

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

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:59 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