regexp für [img][/img]

moses_78

moses_78

Aktives Mitglied
Thread Starter
Dabei seit
08.04.2005
Beiträge
1.288
Reaktionspunkte
22
tach zusammen,

wie der titel schon sagt, möchte ich ein suchmuster, das bei urls in
[img][/img]-tags matcht, bei whitespaces in den url's jedoch nicht
matcht (sch*** wort, ich weiss).

so weit bin ich schon:
Code:
/\[img\](.*?)\[\/img\]/i

damit es whitespaces ignoriert, muss da jedoch noch irgendwo
ein ^[^s] oder soetwas ähnliches rein, ich weiss jedoch nicht
genau wohin.

ich bin hier am verzweifeln, kennt ihr nebenbei noch ein gutes
tutorials zu regexps??

gruß moses :)
 
sorry hatte deine Frage zuerst falsch verstanden:

so funktioniert das wie du willst:
Code:
/\[img\](\S*?)\[\/img\]/i
 
Gunter_S schrieb:
sorry hatte deine Frage zuerst falsch verstanden:

so funktioniert das wie du willst:
Code:
/\[img\](\S*?)\[\/img\]/i

funktioniert! vielen dank :)

dann ist "S" also ein negiertes "s" ?!? ich dachte, ich müsste eine eigene
zeichenklasse erzeugen, und diese dann durch ein caret negieren....

hätte noch jemand was zu meiner zweiten frage? ;)
 
hast du dir die beiden Links mal angeschaut?
Ist zwar kein Tutorial wie gefordert, aber ne gute Doku.
Und unten sind meistens auch noch gute Beispiele von Usern.
 
Gunter_S schrieb:
hast du dir die beiden Links mal angeschaut?
Ist zwar kein Tutorial wie gefordert, aber ne gute Doku.
Und unten sind meistens auch noch gute Beispiele von Usern.

stimmt, die dokus von php.net sind gut, aber ich wollte reguläre ausdrücke
eigentlich verstehen, und nicht nur abkupfern. am liebsten wäre mir eine
wirklich idiotensichere step-by-step-anleitung.
 
hmm, hab ich bisher noch nirgends gesehen.
Hast du ein generelles Verständnisproblem von regulären Ausdrücken oder eher bestimmte Probleme damit?
Vielleicht kann ich dir das erklären.
 
Gunter_S schrieb:
Hast du ein generelles Verständnisproblem von regulären Ausdrücken oder eher bestimmte Probleme damit?

tendenziell ersteres. das bekomme ich aber auch noch hin, selbstverständlich
trotzdem vielen dank für dein angebot.
 
vielleicht noch ein kleiner Tipp, was im ersten Moment für Ratlosigkeit sorgen kann.

Es gibt zwei generell unterschiedliche Syntaxen von regulären Ausdrücken in PHP.
Zum einen die Perl kompatible in z.b. preg_replace() und die "andere" z.b. in ereg()

In der Perl kompatiblen braucht man ein Zeichen, dass den regulären Ausdruck einleitet und beendet. Das war in deinem Beispiel das /.
Die Syntax sieht dann so aus "/regulärer Ausdruck/Modifikatoren". Innerhalb des regulären Ausdruck darf dann kein / mehr verwendet werden. Falls du dennoch eins benötigst, musst du das mit einem \ entschärfen.

In der anderen Syntax (ereg()) gibt es keine Modifikatoren und du darfst kein ? hinter einem * oder + verwenden.

Falls du dich fragst wofür überhaupt das Fragezeichen in diesem Zusammenhang steht: Es weist * an, die kürzeste Möglichkeit zu finden.
Als Beispiel:
lasse deinen regulären Ausdruck auf
Code:
[img]link[/img][img]link[/img]
los und der Ausdruck wird zweimal matchen. (Also so wie gewünscht)

Lässt du dagegen das ? weg, also nur \S* statt \S*?, dann wird der reguläre Ausdruck nur einmal matchen und der Teil der Klammer enthält "link[/img]link". Da ja [b]*[/b] für alle Zeichen gilt.

Gunter
 
moses_78 schrieb:
dann ist "S" also ein negiertes "s" ?!?
Falls Du \s und \S meinst stimmt das.

\s ist ein beliebieges White-Space-Zeichen. Also auch Tabs etc. \S trifft auf alle anderen Zeichen zu.
 
Zurück
Oben Unten