Regex ganzen String negieren?

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
rox²³
Mitglied
Beiträge: 347
Registriert: 24.07.2003 15:18
Wohnort: Schmölln
Kontaktdaten:

Regex ganzen String negieren?

Beitrag von rox²³ »

Also mit ^kann man ja was negieren also ausschließen.
Jetzt hab ich aber das Problem das ich nen bestimmten string negieren will.
Und da hilft mir kein [^a-z] mehr. Müsste halt nen komplexer string sein.

Bloß wie stell ich das an?

Angenommen ich möchte: [bla] und [/bla] nicht haben zwischen den beiden befindet sich aber wiederum text.
Müsste das ganze ja etwa (so würd ichs jetzt mal machen) aussehen.

Code: Alles auswählen

/\[bla\](?![^\"]*\[\/bla\][^\"]\[\/bla\])\[\/bla\]/i
Wie kann ich nen String negieren?
Benutzeravatar
Blutgerinsel
Mitglied
Beiträge: 1801
Registriert: 19.07.2004 18:53
Wohnort: Landkreis Ulm
Kontaktdaten:

Beitrag von Blutgerinsel »

Was willst du machen?
alle [bla] [/bla] entfernen und den Text stehen lassen?

-> http://pcre.nophia.de/evaluate/f9c30f2c ... php#output
Benutzeravatar
rox²³
Mitglied
Beiträge: 347
Registriert: 24.07.2003 15:18
Wohnort: Schmölln
Kontaktdaten:

Beitrag von rox²³ »

Hat sich mittlerweile erledigt.

Ich wollte aus angenommen:

bla [bla]lala[/bla] jetzt viel Text [bla]ende[/bla]

die in eckigen Klammern eingefassten BBCodes in Tags umwandeln hatte aber das Problem das immer nur die äußeren BBCodes umgewandelt wurden. (rot Markiert)

Und der rest wurde immer ignoriert.
Das Problem kann man aber ganz leicht mit dem U-Modifikator lösen.

Hätte ich das eher gewusst dann hätte ich mir meine abenteuerlichen Scripte sparen können :-?
Benutzeravatar
Blutgerinsel
Mitglied
Beiträge: 1801
Registriert: 19.07.2004 18:53
Wohnort: Landkreis Ulm
Kontaktdaten:

Beitrag von Blutgerinsel »

Ich würde aber dringenst dazu raten zu überprüfen was bei verschachtelten BBCodes passiert bzw. ob es noch matched.....

Bei verschachtelten Quotes geht man z.B. auch rekursiv durch und selbst hier ergibt sich die Schwierigkeit wenn mehrere BBCodes integriert sind das es nicht mehr ohne weiteres matched......

Mit anderen Worten das ist Zeug zum Wahnsinnig werden....

U ist auch nicht immer wunderbar -> manchmal macht er zu wenig und wenn er nich gesetzt ist wird wieder zuviel gemacht....
Benutzeravatar
rox²³
Mitglied
Beiträge: 347
Registriert: 24.07.2003 15:18
Wohnort: Schmölln
Kontaktdaten:

Beitrag von rox²³ »

Blutgerinsel hat geschrieben:Mit anderen Worten das ist Zeug zum Wahnsinnig werden....
Das hab ich auch schon mitbekommen ^^

Hab jetzt auch nen neues Problem.
Also das mit den verschachtelten Quotes ist mir erstmal egal auch wenns nicht geht. Hauptsache den Code greifts nicht an.
Dann wirds halt als [ quote ]dfd[ /quote ] ausgegeben.

Aber jetzt will den ganzen String ändern in dem sich der normale Text sowie der bbcode und dessen Inhalt befindet. Da muss ich mal wieder zum Regex zurückgreifen. :(

Naja jedenfalls brauch ich das mit dem negieren eines Strings wirklich.

Beispiel:

Code: Alles auswählen

([^]?!(\[bold\]\[\/bold\])[^])
Würde jetzt folgende Zeichen finden und gegebenfals ersetzten:

abcoldib[bold]ildourb[/bold]vkpöl

Jetzt schliesst er [] / b o l d aus.
Er soll aber [bold] & [/bold] an sich ausschließen und nicht die einzelnen Chars.
Benutzeravatar
Blutgerinsel
Mitglied
Beiträge: 1801
Registriert: 19.07.2004 18:53
Wohnort: Landkreis Ulm
Kontaktdaten:

Beitrag von Blutgerinsel »

ich rall irgendwie deine ganze Negationsgeschichte nicht wozu überhaupt?
http://pcre.nophia.de/evaluate/b4d1e30f ... php#output

Was ist dagegen einzuwenden?
Benutzeravatar
rox²³
Mitglied
Beiträge: 347
Registriert: 24.07.2003 15:18
Wohnort: Schmölln
Kontaktdaten:

Beitrag von rox²³ »

Ok ich hab mich etwas zu dämlich ausgedrückt.

Angenommen ich habe nen Variableninhalt von:

$augabe = "ganz ganz ganz viel Text :smilie: nochmal Text [ code ]irgendwelcher Code[ /code ] und wieder viel Text";

Jetzt möchte ich über ereg_replace() das alles was zwischen den BBcode steht und der bbcode selbst negiert wird. So das nur der Text der nicht im BBCode Tag steht geändert wird.

Grund ich muss den üblichen Text mit nl2br bearbeiten da ich sonst keine Zeilenumbrüche habe. Der BBCode [ code ] benutz <pre>.

Aber wenn ich recht darüber nachdenke wie ich gerade schreibe bin ich vieleicht mit explode besser drann... :-?

nl2br und ereg_replace kann ich ja nicht kombinieren ^^

EDIT: meine natürlich split nicht explode

Trotsdem begreife ich nicht ganz wie ich mit nem Regulären Ausdruck ne Zeichenkette negiere.
Mal nen ganz einfaches Beispiel:

"abcdefghichjklmnichopqrstuvwxyz"

Alle Chars sollen durch "" ersetzt werden (also gelöscht) außer ich

Jetzt mal abgesehen vom Sinn des ganzen. Aber es gibt mit sicherheit dinge wo man sowas braucht.
Antworten

Zurück zu „Coding & Technik“