Regular Expression - negative Bedingung

Snotgun

Mitglied
Hallo... habe hier ein Problem mit dem Regex. Ich will für meine Seite eine Art BBCode bauen - das Regex wollte ich nun dahingehend verwenden, dass es eben die BBC-Teile erkennt und in HTML-Tags umwandelt. Anfangen wollte ich mit etwas verhältnismäßig simplen, also meinetwegen den bold-Tags [ b ] und [ /b ] (natürlich ohne die Leerzeichen). Die Abfrage müsste ja nun logischerweise darauf ausgerichtet sein, dass das Regex ein [ b ] und ein [ /b ] findet, zwischen dem kein [ /b ] liegt. So eine ähnliche Abfrage hatte ich vorher schon benutzt, um HTML-Codes zu entfernen ("<[^>]>") und das klappte ganz gut - das wollte ich eben demensprechend klammern, dass ich dann eben den Mittelteil mit $1 stehen lassen können würde.

Mein Problem ist, dass ich es ums Verrecken nicht hinkriege dem Regex zu sagen, dass das, das NICHT vorkommen darf nicht die Menge der dort angegebenen Zeichen ist, sondern eben nur dieser spezielle Fall, in dem die Zeichen [ /b ] alle so direkt hintereinander stehen. Ich habe schon geklammert und entklammert, ich hab's mit dem (?!) anstatt de [^] versucht etc. etc. etc., aber das Regex tut einfach nicht so, wie ich will :(
 
Hallo

ganz ehrlich, ich habe irgendwie nicht so richtig verstanden, wo Dein Problem jetzt genau liegt. Aber egal, ich poste Dir mal das Script, was ich immer verwende. Vielleicht hift es Dir:

Code:
<%
myText = "Dies ist ein [ b ]fetter Text [ /b ]. Hier die url [ url=http://www.google.de ]bei Google[ /url ]."

dim checkArray
checkArray = _
Array( _
Array(vbcrlf,"<br>"), _
Array("\[url\]([^\[]+)\[/url\]","<a href=""$1"" target=""_blank"">$1</a>"), _
Array("\[url\=([^\[]+)\]([^\[]+)\[/url\]","<a href=""$1"">$2</a>"), _
Array("\[email\=([^\[]+)\]([^\[]+)\[/email\]","<a href=""mailto:$1"">$2</a>"), _
Array("\[email\]([^\[]+)\[/email\]","<a href=""mailto:$1"">$1</a>"), _
Array("\[i\]([^\[]+)\[/i\]","<i>$1</i>"), _
Array("\[b\]([^\[]+)\[/b\]","<b>$1</b>"), _
Array("\[block\]([^\[]+)\[/block\]","<blockquote>$1</blockquote>"), _
Array("\[u\]([^\[]+)\[/u\]","<u>$1</u>"), _
Array("\[center\]([^\[]+)\[/center\]","<center>$1</center>") _
)
function ReplaceDomain(a)
  Set objRegDomain = New RegExp
  for i = 0 to ubound(checkarray)
  objRegDomain.Pattern = (checkarray(i)(0))
  ' --- Pattern austauschen
  objRegDomain.IgnoreCase = True
  objRegDomain.Global = True
  b = checkarray(i)(1)
  ' --- Pattern replacen
  a = objRegDomain.Replace(a,b)
  next
  ReplaceDomain = a
  end function
  Response.write replaceDomain(myText)
%>
 
Nah

Leider nicht ganz das, was ich gesucht habe... Das Problem bei deinem Script wäre ja, dass man z.B. innerhalb eines kursiv geschriebenen Abschnitts nichts mehr fett schreiben könnte weil du ja, soweit ich das sehe, nur nach dem Nichtvorkommen der [ suchst.

Aber, ob man's glaubt oder nicht, ich hab' eine Lösung gefunden ;) Mit dem Pattern ("(\[b\])(([^\[]|\[[^\/]|\[\/[^b]|\[\/b[^\]])*)(\[\/b\])") findet das Regex alle fett markierten Teile, lässt sich auch beliebig für alles andere benutzen :)
 
Zurück