• Liebe User, bitte beachtet folgendes Thema: Was im Forum passiert, bleibt im Forum! Danke!
  • Hallo Gemeinde! Das Problem leidet zurzeit unter technischen Problemen. Wir sind da dran, aber das Zeitkontingent ist begrenzt. In der Zwischenzeit dürfte den meisten aufgefallen sein, dass das Erstellen von Posts funktioniert, auch wenn das Forum erstmal eine Fehlermeldung wirft. Um unseren Löschaufwand zu minimieren, bitten wir euch darum, nicht mehrmals auf 'Post Reply' zu klicken, da das zur Mehrfachposts führt. Grußworte.

problem mit regulären ausdrücken

  • Ersteller killerchicken_inaktiv
  • Erstellt am

killerchicken_inaktiv

Guest
da ich da nicht so ganz durchsteige hab ich mal ne frage: wie kann ich dafür sorgen, dass alles was außerhalb von [xyz] und [/xyz] steht abgefragt wird? zuerst hab ichs so versucht, aber das ging nicht ganz. alles was nach dem letzten [/xyz]-tag stand kam nicht rein...


Code:
preg_match_all( "/(.*?)\[xyz\].*)\[\/xyz\](.*?)/s", $article, $matches, PREG_SET_ORDER );
 

The_Company

Guest
a) Warum immer .*? ? Reicht da nicht .*

b) Warum die Klammer in der Mitte? Diesse: xyz\].*)\[\/xyz
 

Wiseguy3

Guest
/\[xyz\](.*)\[\/xyz\]/isU

...und nicht vergessen - preg_match_all packt die einzelnen Suchergebnisse in ein Array.

lass dir den Inhalt davon nach der Operation mal mit print_r(); anzeigen, dann findest du vielleicht auch die Einträge, die du suchst.
 

The_Company

Guest
Er wollte alles ausserhalb des Tags haben, nicht innerhalb, oder?
Wär dann wohl /(.*)\[xyz\].*\[\/xyz\](.*)/isU, oder?
 

killerchicken_inaktiv

Guest
zu b) die klammer hab ich vergessen rauszunehmen, sry. bei mir im skript steht sie nicht.

zu wise: ich kenne die funktionsweise von preg_match_all, trotzdem thx ;)

nochmal zu company:

/(.*)\[xyz\].*\[\/xyz\](.*)/isU

genau so hatte ich es schon, mit ausnahme des großen U. was bringt das?
 

killerchicken_inaktiv

Guest
:thx:

!!! es geht, und zwar mit folgendem
Code:
preg_match_all( "/(.*?)\[xyz\].*\[\/xyz\](.*?)/isU", $article, $matches, PREG_SET_ORDER );
 

killerchicken_inaktiv

Guest
was bringt denn das große U ??? hab das nirgends gefunden...
 

Livo

Guest
brauche ich einen speziellen Zeichensatz, um Euer Kauderwelsch entziffern zu können ?
;-))
 

killerchicken_inaktiv

Guest
nein, du musst nur das update auf perl-kompatible reguläre ausdrücke version x auf dein gehirn anwenden...
 

Wiseguy3

Guest
Das U matcht ungreedy - das heisst im Gegensatz zur Defaulteinstellung versucht der Ausdruck die _nächstmögliche_ Position zu suchen, anstatt die grösstmögliche.
Beispielstring:

"a_ _ _ b . . . b "

=> /a(.*)b/ macht daraus:

_ _ _ b . . .

=> /a(.*)b/U macht daraus:

_ _ _


ok?

Sehr gute Beispiele gibts auch hier:

http://www.dclp-faq.de/q/q-regexp-gierig.html
 

killerchicken_inaktiv

Guest
danke, wise! ich wusste das mit dem U nicht, sonst hätte ich es selbst rausgefunden :)

es gibt zwei möglichkeiten, wegen deiner frage ganz am anfang, company: entweder so

Code:
preg_match_all( "/(.*?)\[xyz\].*\[\/xyz\](.*?)/isU", $article, $matches, PREG_SET_ORDER );

oder so:

Code:
preg_match_all( "/(.*)\[xyz\].*?\[\/xyz\](.*)/is", $article, $matches, PREG_SET_ORDER );
 

The_Company

Guest
Für den armen Livo:
Reguläre Ausdrücke verwendet man, um Texte zeilenweise (meistens) zu analysieren.
Wenn Du also eine grosse Liste in einer Textdatei hast, kannst Du sie sehr gut analysieren.

Paar Beispiele
/blabla/
gibt jede Zeile zurück, die genau blabla enthält.
/./
gibt jede Zeile zurück, die genau 1 Zeichen enthält. Ein Punkt entspricht jedem Zeichen, nicht genau einem Punkt.
/a*/
gibt jede Zeile zurück, in der nur a's stehen. Ein Stern bedeutet, dass das zeichen davor beliebig oft vorkommen darf (0-unendlich Mal)
/.*/
gibt jede Zeile zurück in der beliebiog viele Zeichen jedes Typs stehen. Genau, erfasst: Jede Zeile ;)

Und das ist erst der Anfang.
 

Atheist2

Guest
Wurde Perl eigentlich von den selben Idioten entwickelt, die C zu verantworten haben?
 

killerchicken_inaktiv

Guest
nicht das ich wüsste. wirst aber bei interesse per http://www.google.de sicher was brauchbares zu dem thema finden.

btw, wer auch immer c zu "verantworten" hat steht bei mir ziemlich im ansehen...
 
Mitglied seit
18.07.2001
Beiträge
2.152
Reaktionen
2
Ort
Nürnberg
Original geschrieben von killerchicken
nicht das ich wüsste. wirst aber bei interesse per http://www.google.de sicher was brauchbares zu dem thema finden.

btw, wer auch immer c zu "verantworten" hat steht bei mir ziemlich im ansehen...

ich huldige Bjarne Stroustrup ([ein]erfinder von c++) und der von ihm geschriebenen "C++ Bibel"

hm.... wem muss ich eigentlich fuer C# lobpreisen? :)
 

The_Company

Guest
Ich glaube, dass Brian Kernighan und Dennis Ritchie (der nebenbei noch Unix erfunden hat) nicht unbedingt als Idioten zu bezeichnen sind. Besonders nicht von jemandem, der dauerhaft C Programme nutzt.

Und Larry Wall - der Erfinder von Perl - hat damit nix zu tun und ist Dir übrigens wahrscheinlich in allen Belangen überlegen, besonders im Flamen.


Für C# bitte Delphi und Java huldigen. (oder Anders Hejlsberg)
 

Atheist2

Guest
C ist die am schlechtesten lesbare PS, die ich kenne. Und ich kenne sogar Assembler.
 

The_Company

Guest
C ist eine der einfachsten Programmiersprachen, die es gibt (von der Grammatik her). Und damit automatisch auch eine der lesbarsten. (Schon alleine deshalb, weil man keine Operatoren überladen kann.)
Natürlich kann man mit jeder Programmiersprache scheisse bauen, wenn mans drauf anlegt, aber C ist einwandfrei. Also lern es lieber, bevor Du drüber meckerst.
 

Wiseguy3

Guest
Können wir bitte einen extra Thread aufmachen für "Ich kann Programmiersprache XYZ nicht und finde sie daher scheisse." .
 

killerchicken_inaktiv

Guest
Original geschrieben von Wiseguy
Können wir bitte einen extra Thread aufmachen für "Ich kann Programmiersprache XYZ nicht und finde sie daher scheisse." .

@mods: den hier zumachen reicht auch...
 
Oben