preg_replace suchregex verbieten?

  • Themenstarter Themenstarter Katharina_
  • Beginndatum Beginndatum
K

Katharina_

Hallo zusammen

Erst mal ein Hallo an alle. Ich bin neu hier wie man nur unschwer erkennen kann :)
Vielleicht kann mir hier ja einer helfen:

Ich erstelle gerade einen Termin Kalender mit den BBCodes oder wie die genau heissen.
Ich benötige im Terminkalender eine Ersatzliste. Also eine Liste wo Wörter drin stehen sollen die automatisch ersetzt werden sollen. Dies hat soweit auch funktioniert.
Ich würde gerne bei einem Regex etwas verbieten.
Der Aufbau vom Suchstring ist ja wie folgt:
SuchRegex$variableFuersWordWeitererRegex
Mit folgender Erweiterung meines bisherigen Regex |(?<=\]) sage ich ihm ja das er mir das Wort ersetzen soll wenn ein ] vor dem Wort steht. Nun würde ich gerne dies erweitern, dass wenn vor dem Suchwort zwar die gesuchten dinge wie eben |(?<=\]) vorhanden sind ABER entweder:
- [AURL]
- [AURL=...]
- oder dahinter [/AURL]
vorkommen, dass er es dann nicht ersetzt. Aus soll er dies nicht ersetzen wenn zwischen diesen drei punkten und dem Wort ein oder zwei Leerschläge sind.

Ich hoffe ihr versteht was ich meine und könnt mir weiterhelfen.

Ein weiteres Problem wo ich hoffe ihr könnt mir helfen hängt mit dem selben zusammen:
Wenn dies mit der AURL vorkommt soll er es nicht ersetzen. (Ist etwas schwer zu erklären)
Sagen wir das gesuchte Wort ist "Hallo".
Nun haben wir Folgendes.
Dies ist ein Satz mit hallo und vielleicht auch mehr.
Dann soll er dies ersetzen (macht er bisher auch).
JEDOCH wenn dies vorkommt soll er es nicht ersetzen (Ich weiss nicht ob es geht. Aber ich hoffe es mal)
[AURL=...]Irgend ein Satz wo Hallo vorkommt[/AURL]
Denn sonst würde er mir aus hallo einen Link machen und aus dem AURL auch. Und dies möchte ich dass er dann den Link macht aber aus dem Hallo keinen.

Über Hilfe würde ich mich freuen.

Gruss

Katharina
 
Das mit dem [AURL] davor bzw. dem [/AURL] dahinter ginge, das mit den "Leerschlägen" nicht.
Da ich annehme, dass diese 3 Punkte für beliebig viele Zeichen stehen sollen.... das geht auch nicht.

Grund: Bedingungen müssen eine feste Länge haben... was da nicht der Fall ist.
 
Sven Mintel hat gesagt.:
Das mit dem [AURL] davor bzw. dem [/AURL] dahinter ginge, das mit den "Leerschlägen" nicht.
Da ich annehme, dass diese 3 Punkte für beliebig viele Zeichen stehen sollen.... das geht auch nicht.

Grund: Bedingungen müssen eine feste Länge haben... was da nicht der Fall ist.

Hallo

Das wäre schon super und wie würde dies gehen?

Zum anderen mit dem =. Würde dies nicht doch irgendwie gehen? Ich habe dies mal in einem phpbb, vb oder sonstiges gesehen wo für so einen tag einfach mit url mit dem gearbeitet wurde:
/\?)([^\"']+)\\1](.+)
Oder meinst du es geht wegen diesem nicht?

Sollte nur das obere gut sein wäre es auch nicht so schlimm. Wäre schon froh wenn dies so funktionieren würde auch wenn ein oder zwei leerschläge drin sind. Also hallo [/AURL]..

Gruss

Katharina
 
Zuletzt bearbeitet von einem Moderator:
Sven Mintel hat gesagt.:
Da ist ja auch keine Bedingung dabei.

Probiers mal so:
PHP:
//


$variable = preg_replace('@(?<!AURL|AURL=)([\w]*\s*\])[^\[]*(\[/)(?!AURL)@si', '\\1'.$replacement.'\\2', $variable);

//
...das wäre zwar nicht 100%ig eindeutig(es würde z.B. auch zutreffen auf [AURLIRGENDWAS], vielleicht reichts ja für deinen Zweck


Hallo

Erstmal danke für deine Antwort. So wird mir jedoch nur noch eine weise Seite ausgegeben.
Hab dies nun so erweitert:
So sieht mein suchpattern aus:
"/((?<!\S)|(?<=\])){$termin}(?!\.\w)(?!\-)(?!\w)/i";
Diesen habe ich nun so erweitert:
"/((?<!\S)|(?<=\])|@(?<!AURL|AURL=)([\w]*\s*\])[^\[]*(\[/)(?!AURL)@si){$termin}(?!\.\w)(?!\-)(?!\w)/i";
So bkeomme ich wie gesagt nur noch eine weise Seite. Was ich aber auch noch nicht verstehe ist, welches dieser teile mir sagt das er es bei desem kriterium dann nicht ersetzen soll, (bei ]WORT ersetzt ers mir ja, und wenn aber das ganze dann eine url ist soll ers mir nicht ersetzen), und wie ich dies dann erweitern könnte für "hinter dem wort mit [/AURL]

Gruss

Katharina
 
Katharina_ hat gesagt.:
Hallo

Erstmal danke für deine Antwort. So wird mir jedoch nur noch eine weise Seite ausgegeben.
Versuchs mal mit echo $variable :-)

Ansonsten: deine "Erweiterung"ist Unsinn, schaus dir vielleicht nochmal genauer an:confused:
Bei meinem Ausdruck ist @ der Delimiter....danach kannst du nichts mehr ranhängen.
 
Sven Mintel hat gesagt.:
Versuchs mal mit echo $variable :-)

Ansonsten: deine "Erweiterung"ist Unsinn, schaus dir vielleicht nochmal genauer an:confused:
Bei meinem Ausdruck ist @ der Delimiter....danach kannst du nichts mehr ranhängen.

Hallo

Die variabel hat ein Wert. Zum @ da kann ich wenig dafür :P Dies kommt ja von deinem vorschlag.

Gruss

Katharina
 
Sicher hab ich das @ verwendet...es ändert aber nichts an der Tatsache, dass nach dem End-Delimiter der Ausdruck zu Ende ist..... und das ist bei mir das 2te @

Ob man als Delimiter ein @ oder ein Slash oder sonstwas verwendet, ist dabei egal.

Dass die Variable einen Wert hat, ist ja schonmal gut.... nur wenn du ihn nicht ausgibst, bleibt die Seite halt leer.
 
Hallo

Es wird ausgegeben und funktioniert ja auch einwandfrei bis auf das mit der AURL. Sobald ich dein code anhänge wie oben beschrieben wird einfach gar nichts mehr ausgegeben. Habe auch mal das erste @ mit | ersetzt wie ich die anderen bedingungen angehängt habe und auch probiert das letze @si zu entfernen. Bringt mir nur eine leere seite.

Es funktioniert ja alles. Hallo hier wird mir das Hallo ersetzt wie ich ja mit dem teil erreichen konnte:
"/((?<!\S)|(?<=\])){$termin}(?!\.\w)(?!\w)/i"
Hier wird mir ja nun gesagt nach einem ] soll er mir das wort erstzen.
Jedoch ersetzt er mir auch dies:[AURL=URL] hallo [/AURL]. Und genau das möchte ich verhindern. Also sobald dieses AURL vorkomt vorne oder hinten soll er es nicht ersetzen sonst alles so lassen wie es ist.

Gruss

Katharina
 
Zurück