• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[PHP] regexp - alle Zeichen OHNE eine best. Zeichenkette

Crypt

New member
Also, ich habe ein Problem. Ich bin hier nun schon einige Zeit am Probieren, aber ich bekomme es einfach nicht hin.

auf diesem Weg:

[^bst]

kann man ja bestimmte Zeichen ausschließen, d.h. das obige Beispiel bedeutete eine Zeichenkette, ohne die Zeichen b und s und t.

Jetzt möchte ich aber eine Zeichenkette, die aus beliebigen Zeichen besteht, aber einen bestimmten string nicht enthalten darf.

D.h. z.B: eine beliebig lange Zeichenkette, aus beliebigen Zeichen, aber sie darf den String "" (also das zwischen den quotes) nicht enthalten. (und zwar eben _exakt_ diesen String)
Wie formuliere ich dieses »ohne ""«?

Ich hoffe es kann mir jemand (möglichst schnell) helfen...
Danke schonmal im Voraus!
 
Zuletzt bearbeitet:
Erstmal danke für die Antwort!

Nein, es ist so gemeint, dass das Muster dann übereinstimmt, wenn er _nicht_ enthalten ist.

d.h. angenommen ich machte ein preg_replace, dann soll ein Teilstring dann ersetzt werden, wenn er beliebige Zeichen enthält, aber kein .

Eigentlich ist das ganze nur Teil einer komplexeren Expression.

Hier mal ein Beispiel, dass ich jetzt konstruiere:
PHP:
"/\[beginn\].+\[end\]/"

Und jetzt schaue man sich mal dieses (.+) an. Das bedeutet ja: ein oder mehr beliebige Zeichen. Und jetzt brauche ich soz. die Einschränkung: "aber die Zeichenkette darf nicht enthalten sein".

Und wie formuliere ich das mit einem Regulären Ausdruck?
 
Zuletzt bearbeitet:

Ok, vielen Dank, ich werde mir das gleich nochmal genauer anschauen, aber ich denke damit werde ich auf die Lösung kommen.

Trotzdem nochmal ein paar Beispiele:

match:

[tag]Hallo, dies ist ein \ / Text [] b [/tag]

do not match:

[tag]Hallo, dies ist ein Text[/tag]

EDIT: ich blicke jetzt auf die Schnelle bei diesen Lookaheads trotzdem nicht durch, ich werde mir das nochmal in Ruhe zu Gemüte führen müssen.ß0
Ich habe gerade keinen Plan, was die Unterschiedlichen Kombinationen bedeuten (?=,?!,?<!,?<=...). Gibts dazu vll. was im PHP Manual? Ich habe jetzt nichts gefunden, aber vll. habe ich einfach unter den falschen Begriffen gesucht.
 
Zuletzt bearbeitet:
Ok, vielen Dank, ich werde mir das gleich nochmal genauer anschauen, aber ich denke damit werde ich auf die Lösung kommen.
nein, wie oben bereits erwähnt, ist der weg auch nicht der richtige. aber wenn du es nicht anders willst, das sollte tun: (ist aber meiner meinung nach nicht gerade schön - aber vielleicht fällt noch jemandem was besseres ein)

Code:
\[begin\][^\[]*([\[](b([^\]])+)?([^b])?)?[^\]]*\[end\]


EDIT: ich blicke jetzt auf die Schnelle bei diesen Lookaheads trotzdem nicht durch, ich werde mir das nochmal in Ruhe zu Gemüte führen müssen.ß0
Ich habe gerade keinen Plan, was die Unterschiedlichen Kombinationen bedeuten (?=,?!,?<!,?<=...). Gibts dazu vll. was im PHP Manual? Ich habe jetzt nichts gefunden, aber vll. habe ich einfach unter den falschen Begriffen gesucht.
steht alles da, und das ist Regex-syntax, die ist von php nur mittelbar abhängig.
 
Zuletzt bearbeitet:
Also ich habe das ganze Problem mittlerweile etwas anders gelöst. Somit ist dieser Reguläre Ausdruck nicht mehr so von Bedeutung.

Ich dachte eigentlich Anfangs, dass es dafür eine simple Lösung gibt (z.B. so eine Syntax wie "(*^())" oder so), aber scheinbar lässt sich das nur mit komplexeren Ausdrücken lösen - und mein Ausdruck ist so schon ziemlich unübersichtlich.

Es handelte sich bei der ganzen Sache übrigens um ein Skript, dass bbcode parst.
Ich habe das Ersetzungsverhalten etwas geändert, das Ergebnis ist aber fast das gleiche.
 
Zurück
Oben