Buchempfehlung
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
"Der" Petzold, das über 1000 Seiten starke Standardwerk zum Win32-API - besonders nützlich u. a. bei der GUI-Programmierung in FreeBASIC! [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

fb:porticula NoPaste

Info
Info / Hilfe
Liste
Übersicht / Liste
Neu
Datei hochladen
Suche
Quellcode suchen
Download
Dateidownload

PCRE (mit Einschränkung) in Scintilla-RegExp umwandeln

Uploader:Redakteurnemored
Datum/Zeit:30.09.2012 03:44:42

' Änderung eines PCRE-ähnlichen regulären Ausdrucks in ein Scintilla-lesbares Format
' \( und \) wird in ( und ) umgewandelt und umgekehrt
' \d \s \w \D \S \W wird durch einen entsprechenden Ausdruck ersetzt
' Nicht unterstützt werden die Quantifier ?, {anz}, {min,max}, Alternativen | sowie die genügsame Suche *?
' Look-around assertions wird ebenfalls nicht unterstützt

function regexp(eingabe as string) as string
  dim i as integer = 0, ret as string = eingabe
  do while i < len(ret)
    select case as const ret[i]
      case 40       ' "("
        ret = left(ret, i) & "\(" & mid(ret, i+2)
        i += 2
      case 41       ' ")"
        ret = left(ret, i) & "\)" & mid(ret, i+2)
        i += 2
      case 92       ' "\"
        if len(ret) < i+2 then return ret
        select case as const ret[i+1]
          case 40   ' "\("
            ret = left(ret, i) & "(" & mid(ret, i+3)
            i += 1
          case 41   ' "\)"
            ret = left(ret, i) & ")" & mid(ret, i+3)
            i += 1
          case 68   ' "\D"
            ret = left(ret, i) & "[^0-9]" & mid(ret, i+3)
            i += 6
          case 83   ' "\S"
            ret = left(ret, i) & "[^ \t]" & mid(ret, i+3)
            i += 6
          case 87   ' "\W"
            ret = left(ret, i) & "[^a-zA-Z0-9_]" & mid(ret, i+3)
            i += 13
          case 100  ' "\d"
            ret = left(ret, i) & "[0-9]" & mid(ret, i+3)
            i += 5
          case 115  ' "\s"
            ret = left(ret, i) & "[ \t]" & mid(ret, i+3)
            i += 5
          case 119  ' "\w"
            ret = left(ret, i) & "[a-zA-Z0-9_]" & mid(ret, i+3)
            i += 12
          case else
            i += 2
        end select
      case else
        i += 1
    end select
  loop
  return ret
end function