Nicht einfach zu ersetzen sondern dabei zu bearbeiten.
zB wird so aus
flei\u00dfige Mittzwanziger f\u00fcllt ..\u2011 \u2019 Jonas Kaufmann \u2013 Dolce Vita
fleißige Mittzwanziger füllt ..- ’ Jonas Kaufmann – Dolce Vita
Fazit: Im Prinzip geht es ganz gut.
Beachten muss man, das das Callout nur bei einem Match aufgerufen wird.
Die Ergebnisvariable sollte daher immer schonmal mit dem Haystack vorbelegt sein,
und das Callout Ergebnis nur übergeben werden wenn es nicht leer ist
außerdem muss man mit der Bennenung der Funktionen aufpassen und gleichermaßen bei der Übergabe der Variablen.
Code: Select all
RegExMatch(text, "im).\\u(.{4})(?CCallout1)") ;html-entities werden in unicode umgewandelt
if CalloutReWorkAll1()<>""
test := CalloutReWorkAll1() "`n"
else
test:= text ; sonstwäre test leer wodurch im nächsten regexp der Haystack leer wäre
; callout werden NUR bei einem Match aufgerufen!!
;Das Ergebnis vom ersten Callout hird her als Haystack benutzt
;wird kein Kaufmann gefunden wird der Callout nicht aufgerufen und test daher auch nicht geändert.
RegExMatch(test, "im)(Kau.mann)(?CCallout2)") ;Kaufmann wird gelöscht
if CalloutReWorkAll2()<>""
test := CalloutReWorkAll2()
msgbox , % test ;fleißige Mittzwanziger füllt ..- ’ Jonas – Dolce Vita
exitapp
return
;============================================================
Callout1( m,CalloutNumber, FoundPos, text, NeedleRegEx){
;msgbox, wird nur aufgerufen wenn es einen Match gibt
CalloutReWorkAll1(m1,text)
return 1
}
CalloutReWorkAll1(match:="", haystack:=""){
static g , hh , i:=0
;innerhalb von callout haystack merken.
if (haystack<>"") and !i
hh:=haystack , i:=1
y:=chr(Format("{:d}" ,"0x" match)) ;match bearbeiten
hh := StrReplace(hh, "\u" match , y) ;match ersetzen
if (haystack="") ;ausserhalb des callouts leer aufrufen CalloutReplaceAll()
return hh , i:=0
return
}
;============================================================
Callout2( m,CalloutNumber, FoundPos, test, NeedleRegEx){
CalloutReWorkAll2(m1,test)
return 1
}
CalloutReWorkAll2(match:="", haystack:=""){
static g , hh , i:=0
;innerhalb von callout haystack merken.
if (haystack<>"") and !i
hh:=haystack , i:=1
y:=""
hh := StrReplace(hh,match , y) ;match ersetzen (löschen)
if (haystack="") ;ausserhalb des callouts leer aufrufen CalloutReplaceAll()
return hh , i:=0
return
}