fb:porticula NoPaste
PCRE (mit Einschränkung) in Scintilla-RegExp umwandeln
Uploader: | nemored |
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