 Michael Wodrich | En el regulären Ausdrücken kam me el Concepto uno eigenen Testprogrammes.
Außerdem Yo quería RexEx-Ausdrücke con Backslash automáticamente umwandeln dejar. Mi Versuche anbei. Der Backslash con nachfolgendem doppelten Anführungszeichen muß aber a mano en Backslash+q umgewandelt voluntad.
Außerdem müßen esta el Escapezeichen ausgeschaltet voluntad, como Yo sonst el doppelten Backslashes sí no wiederfinde...
Der Umwandler schlägt automáticamente a, si nichts gefunden wurde - aber sólo una Anzeigevergleich.
El Ergebnisse voluntad en el Editor geladen, el se en *.TXT para zuständig hält (ShellExec).
!
RegEx_Tester
de XProfan 10
Conjunto("Escape",0)
Declarar CR$, Qu$
CR$ = Chr$(13) + Chr$(10) Zeilenende
Qu$ = Chr$(34) Doppelte Anführungszeichen
========== Suchmuster y Beispiele ==========
Declarar Datei_Muster$, Datei_Test$
Datei_Muster$ = "(?mi)^[^~./:~*~?q<>~|]{1}[^/:~*~?q<>~|]{0,254}$"
Datei_Test$ = "abcd.jpg" + CR$ +
"a b239.abcd ef12983 298" + CR$ +
"a....23498" + CR$ +
".abcde.jpg" + CR$ +
"abcde?.jpg" + CR$ +
"c:\abcde.jpg" + CR$
Declarar eMail_Muster$, eMail_Test$
eMail_Muster$ = "(?mi)^([a-zA-Z~d]+([-~.~w]*[a-zA-Z~d])*@([a-zA-Z~d][-~w]*[a-zA-Z~d]~.)+[a-zA-Z]{2,9})$"
eMail_Test$ = "joe@aol.com" + CR$ +
"ssmith@aspalliance.com" + CR$ +
"a@b.cc" + CR$ +
"joe@wrox.co.uk" + CR$ +
"joe@domain.info" + CR$ +
"e@eee.com" + CR$ +
"eee@e-e.com" + CR$ +
"eee@ee.eee.museum" + CR$ +
".@eee.com" + CR$ +
"@eee.com" + CR$ +
"eee@e-.com" + CR$ +
"eee@ee.eee.eeeeeeeeee" + CR$ +
"a@b" + CR$ +
"notanemail" + CR$ +
"joe@@." + CR$ +
"joe@123aspx.com" + CR$ +
"joe@web.info" + CR$ +
"joe@company.co.uk" + CR$
Declarar Money_Muster$, Money_Test$
Money_Muster$ = "(?m)^(~x80|~x24|~xA3|~xA5|~x20AC|~x0024|~x00A3|~x00A5)?(([1-9]~d{0,2}(~,~d{3})*)|([1-9]~d*)|(0))(~.~d{2})?$"
Money_Test$ = "$1,234,567.89" + CR$ +
"1234567.89" + CR$ +
"1,234,567.89" + CR$ +
"$0.00" + CR$ +
"$1,2345,67.89" + CR$ +
"$1234,345,678.0" + CR$ +
"£1.25" + CR$ +
"¥15000" + CR$ +
"€4.37" sí, el liebe Euro-Signo...
Declarar Tel_Muster$, Tel_Test$
Tel_Muster$ = "(~+~d *)?(~(~d+~) *)?~d+(-~d*)*"
Tel_Test$ = "Phone of AlkorSoft (project PayCash) is +7(812) 329-44-69"
Declarar Url_Muster$, Url_Test$
Url_Muster$ = "(?i)" + ignoriere Groß/Klein
"((FTP|HTTPS|HTTP)://|www~.)" + Protokoll (sin: www.)
"([~w~d~-]+:[~w~d~-]+@)?" + User / Contraseña
"([^/~r~n:]+)" + TCP Adresse oder Domainname
"(:~d{1,5})?" + Portnummer
"(((/[%+~w~d~-~.]*)+)*)" + Unix-Pfad
"(~?[^~s=&]+=[^~s=&]+(&[^~s=&]+=[^~s=&]+)*)?" + Abfrage- (GET) Parámetro
"(#[~w~d~-%+]+)?" HTML-Anker (Bookmark)
Url_Test$ = "https://192.168.0.2:80/users/~fname.lname/file.ext" + CR$ +
"ftp://user1:pwd@www.domain.com" + CR$ +
"ftp://download-store@www.domain.com" + CR$ +
"ftp://download-store.com/the_file.zip" + CR$ +
"https://www.dom" + CR$ +
"www.domain.com" + CR$ +
"user1:pwd@domain.com" + CR$ +
"192.168.0.2/folder/file.ext" + CR$ +
"https://192.168.0.2/folder/file.ext" + CR$ +
"https://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/reconbackreferences.asp" + CR$ +
"https://www.domain.com/folder" + CR$ +
"https://www.domain.com/folder/" + CR$
========== Prozeduren ==========
Proc RegEx_Umformer
Bitte beachten: el Umformer funktioniert sólo, si el Escapezeichen ausgeschaltet son !!!
Auch el reguläre Ausdruck muß con Conjunto("Escape",0) erfaßt worden se.
Sonderfall: Doppelte Anführungszeichen en el String ersetzt uno por Hand en q, el
se entonces hier otra vez geändert.
RegEx-Escapezeichen:
xnn Signo con el Hex-Code nn (ASCII-Texto)
x{nnnn} Signo con el Hex-Code nnnn (una Byte para ASCII-Texto y zwei Bytes para Unicode-Signo
una Tabulator (HT/TAB), gleichbedeutend como x09
Zeilenvorschub (NL), gleichbedeutend como x0a
Wagenrücklauf (CR), gleichbedeutend como x0d
f Seitenvorschub (FF), gleichbedeutend como x0c
a Alarm (bell) (BEL), gleichbedeutend como x07
e Escape (ESC), gleichbedeutend como x1b
\ Backslash incluso (behandelt el Umformer)
q XProfan: Doppelte Anführungszeichen (behandelt el Umformer)
vordefinierte Klassen:
w una alphanumerisches Signo inklusive "_"
W kein alphanumerisches Signo, auch kein "_"
d una numerisches Signo
D kein numerisches Signo
s irgendein wörtertrennendes Signo (entspricht [
f])
S kein wörtertrennendes Signo
Wortgrenzen:
findet una Wortgrenze (wo w a W grenzt)
B findet alles salvo uno Wortgrenze
Modifikatoren:
(?i) Führe el Búsqueda Schreibweisen-unabhägig por
(?m) Behandle el Zielstring como mehrzeiligen String. Das bedeutet, ändere
el Bedeutungen de "^" y "$": Statt sólo el Anfang oder el Ende des
Zielstrings a encontrar, se cada Zeilenseparator innerhalb uno Cuerdas
erkannt (beachte auch el Zeilenseparatoren)
(?s) Behandle el Zielstring como einzelne Línea. Das bedeutet, dass "." cada
beliebige Signo findet, incluso Zeilenseparatoren, el lo normalerweise no findet.
(?g) Modifikator para el "Genügsam"-Modus. Durch el Ausstellen voluntad todos folgenden
Operatoren en el "Genügsam"-Modus geschaltet. Standardmassig son todos Operatoren
"gierig". Wenn also el Modifikator (?-g) de es, entonces arbeitet + como +?, * como *? etcétera
Kommentar:
(?#texto) "text" es Kommentar (darf no schliessende Klammer beinhalten).
Parámetros en$
Declarar out$, i%
out$ = Translate$(en$,"\",Chr$(250)) räume todos Doppel-Backslashes de el Weg
out$ = Translate$(out$,"q",Chr$(34)) Sonderfall doppelte Anführungszeichen
out$ = Translate$(out$,"","~") ändere el Escapezeichen
out$ = Translate$(out$,Chr$(250),"") lugar el deseado Backslash otra vez her
out$ = Translate$(out$,"[a-zA-Z0-9]","[a-zA-Z~d]")
out$ = Translate$(out$,"[0-9a-zA-Z]","[a-zA-Z~d]")
out$ = Translate$(out$,"[a-zA-Z0-9_]","[~w]")
out$ = Translate$(out$,"[_0-9a-zA-Z]","[~w]")
out$ = Translate$(out$,"[0-9]","[~d]")
out$ = Translate$(out$,"[^a-zA-Z0-9]","[^a-zA-Z~d]")
out$ = Translate$(out$,"[^0-9a-zA-Z]","[^a-zA-Z~d]")
out$ = Translate$(out$,"[^a-zA-Z0-9_]","[~W]")
out$ = Translate$(out$,"[^_0-9a-zA-Z]","[~W]")
out$ = Translate$(out$,"[^0-9]","[~D]")
Volver out$
ENDPROC
Proc ZeigMal
Parámetros Texto$
Declarar f$, hF&, B#
f$ = $TempDir + "TEMP_RegEx_Tester.txt"
Dim B#,Len(Texto$)+1
String B#,0 = Texto$
BlockWrite f$,B#,0,Len(Texto$) Erstelle temp. Expediente...
Disponer B#
ShellExec(f$,"open",1) zeige ellos a...
Repeat
hF& = FindWindow( "TEMP_RegEx_Tester" ) warte a el Ventana como es...
Until hF& <> 0
Borrar f$ y entferne el Expediente otra vez. Mit el Editor kann el Ergebnis trotzdem gesichert se.
ENDPROC
Proc RegEx_Tester
Parámetros RegEx$, Texto$
Declarar Erg$, s$, RestText$, Offset&, oldDeci%, Index%
oldDeci% = Conjunto("Decimals",0)
Offset& = 1
RestText$ = Texto$
If Len(Texto$) < 80
Erg$ = "Suchtext: " + Qu$ + Texto$ + Qu$ + CR$
Erg$ = Erg$ + Espacio$(11) +
If(Len(Texto$) >= 10,
MkStr$("1234567890",Len(Texto$) 10) + Left$("1234567890",Len(Texto$) mod 10),
Left$("1234567890",Len(Texto$) mod 10)) + CR$ + CR$
Más
Erg$ = "Suchtext:" + CR$ + Texto$ + CR$ + CR$
EndIf
Erg$ = Erg$ + "regulärer Ausdruck:" + CR$ + RegEx$ + CR$ + CR$
Erg$ = Erg$ + "Ergebnis:" + CR$
s$ = Match$(RegEx$,RestText$)
Mientras que s$ <> ""
Inc Index%
Erg$ = Erg$ + "Match " + Str$(Index%) + ": " + Qu$ + s$ + Qu$ +
", Len: " + Str$(%MatchLen) +
", Pos: " + Str$(%MatchPos) +
", GesamtPos: " + Str$(Offset& + %MatchPos - 1) + CR$
Offset& = Offset& + %MatchPos + %MatchLen - 1
RestText$ = Mid$(Texto$,Offset&,Len(Texto$))
s$ = Match$(RegEx$,RestText$)
EndWhile
Caso negativo Index%
Erg$ = Erg$ + "*** no Treffer ***" + CR$ + CR$
Erg$ = Erg$ + "Wurden tal vez el Escapezeichen no angepaßt? Hier una Gegenüberstellung." + CR$
Erg$ = Erg$ + "alt: " + Qu$ + RegEx$ + Qu$ + CR$
Erg$ = Erg$ + "neu: " + Qu$ + RegEx_Umformer( RegEx$ ) + Qu$ + CR$
EndIf
Conjunto("Decimals",oldDeci%)
Volver Erg$
ENDPROC
========== Hauptprogramm ==========
ZeigMal RegEx_Tester( "(?i)[e]+","Proc RegEx_Tester" )
ZeigMal RegEx_Tester( "(w+)?","Proc RegEx_Tester" ) para Testen
ZeigMal RegEx_Tester( Datei_Muster$, Datei_Test$ )
ZeigMal RegEx_Tester( eMail_Muster$, eMail_Test$ )
ZeigMal RegEx_Tester( Money_Muster$, Money_Test$ )
ZeigMal RegEx_Tester( Tel_Muster$, Tel_Test$ )
ZeigMal RegEx_Tester( Url_Muster$, Url_Test$ )
Conjunto("Escape",1)
End
Schöne Grüße Michael Wodrich |
|