WinFuture-Forum.de: [php] Regex-problem?! - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

[php] Regex-problem?!


#1 Mitglied ist offline   dblay 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.246
  • Beigetreten: 18. März 07
  • Reputation: 1

  geschrieben 21. August 2007 - 16:46

Hey Leute,

ich hab da ein ganz komisches Problem, auf das ich mir absolut keinen Reim machen kann: Und zwar möchte ich mittels eines Regulären Ausdrucks Usereingaben für ein CMS-System umwandeln. Zur Auszeichnung des Textes soll dabei eine Art BBCode verwendet werden. Nun habe ich folgenden Regex gebaut, der alle "Eventualitäten" dieses Auszeichnungscodes abdecken soll:

/^(.*?)(\s*)\[\s*([a-z0-9]+)(.*?)\](.*?)\[\/\s*\3\s*\](\s*)(.*?)$/si


Der Regex wird mittels preg_match in einer while-Schleife aufgerufen; preg_replace würde mir nicht soviel bringen, da die Subpatterns noch weiterverarbeitet werden müssen.

Kurz zur Erklärung: Im 1. Subpattern ist alles das drin, was vor den BBCode-Tags kommt, im 7. alles was dahinter kommt. Im 2. und 6. Subpattern werden die White-Spaces gespeichert, die vor bzw. hinter den Tags kommen (die müssen in einigen Fällen ersetzt werden). Im 3. Subpattern ist dann der Tag-Name drin, im 4. eventuelle Attribute. Zu guter Letzt wird im 5. Subpattern das gespeichert, was zwischen den Tags steht. Ach so, und mittels der Back-Reference \3 wird natürlich sicher gestellt, dass der End-Tag auch mit dem Start-Tag übereinstimmt.

Innerhalb der while-Schleife werden nun die BBCode-Tags durch (x)html ersetzt.

Jetzt zum Problem: Erstmal läuft das alles sehr schön; aber aufeinmal, wenn ich bspw. am Ende der Eingabe im Textfeld ein Enter mehr mache, oder auch irgendwo im Text ein Wort verändere, dann ersetzt er mir plötzlich nur noch die ersten paar Zeilen, und gibt den restlichen Code unverändert zurück. Das Verrückte dabei ist ja, dass dieses Problem nicht immer reproduzierbar ist - und auch die Stelle, wo er aufhört, den Code zu ersetzen, ist immer mal eine andere!!

Ist mir vollkommen schleierhaft. Wo liegt das Problem? Vielleicht ist ja auch im Regex was falsch, aber ich bin schon x-mal drüber gegangen, und konnte bis jetzt nichts finden, was das Problem verursachen könnte. Hätte von euch jemand eine Idee?

Gruß, dblay

Dieser Beitrag wurde von dblay bearbeitet: 21. August 2007 - 16:48

Zeit ist, was verhindert, dass alles gleichzeitig passiert.
0

Anzeige



#2 Mitglied ist offline   _seym. 

  • Gruppe: aktive Mitglieder
  • Beiträge: 52
  • Beigetreten: 12. Februar 06
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 27. August 2007 - 21:38

hi erstmal.

is jetz vielleicht nicht unbedingt die lösung, die du erwartet hast, aber versuchs doch einfach mal mit einem $inp_string = rtrim($inp_string, "\n"); auf den input-string bevor du ihn verarbeitest... ^^

mfg.
mfg,
_seym.
0

#3 Mitglied ist offline   dblay 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.246
  • Beigetreten: 18. März 07
  • Reputation: 1

geschrieben 28. August 2007 - 11:03

Danke für deine Antwort!

Tja, das hatte ich auch schon versucht (mit "trim") - hat aber leider alles nix gebracht, zumal der Fehler ja teilweise auch kam, wenn ich irgendwo mitten im Text was verändert hab.

Ich hab das Problem jetzt einfach so umgangen, dass ich den "Universal"-Regex wieder auseinander klamüsert hab, und nun für die unterschiedlichen Tag-Arten jeweils einen eigenen Regex hab. Also dann sowas in der Art wie \[(h1|h2|h3)\] und \[(b|i)\] ... na ja, diejenigen immer zusammengefasst, die sich eben gleichartig verarbeiten lassen. Das hat zudem noch einen positiven Effekt, nämlich dass das Skript schneller läuft. (Warum auch immer!?)

Nochmals vielen Dank!
Zeit ist, was verhindert, dass alles gleichzeitig passiert.
0

#4 Mitglied ist offline   _seym. 

  • Gruppe: aktive Mitglieder
  • Beiträge: 52
  • Beigetreten: 12. Februar 06
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 28. August 2007 - 13:55

lustig ^^
ich wollte auch mal einen bbcode regex erstellen, der alles in einem aufschwung macht... bin kläglich dran gescheitert. sagmal, weißt du zufällig einen guten regex editor? mir ist es schon mehrmals passiert, dass ich regexen hab, die so lang und unübersichtlich werden, dass syntaxhighlighting ne klasse sache wär.

mfg.
mfg,
_seym.
0

#5 Mitglied ist offline   dblay 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.246
  • Beigetreten: 18. März 07
  • Reputation: 1

geschrieben 29. August 2007 - 17:15

Das ist mal ne gute Frage! Also was mir so spontan einfällt: Für Notepad++ gibt es allerhand Erweiterungen, vllt findet man da ja was entsprechendes, oder man erstellt sich (auch in N++) ein benutzerdefiniertes Syntax-Highlighting. Hab ich mich aber noch nicht näher mit auseinandergesetzt, müsste man aber mal probieren :smokin:
Zeit ist, was verhindert, dass alles gleichzeitig passiert.
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0