 Michael Wodrich | chez den regulären Ausdrücken kam mir qui concept eines eigenen Testprogrammes.
Aussi voulais je RexEx-Ausdrücke avec Backslash automatisch transformer laisser. mon Versuche anbei. qui Backslash avec nachfolgendem doppelten Anführungszeichen doit mais de main dans Backslash+q umgewandelt volonté.
Aussi müßen hierfür qui Escapezeichen ausgeschaltet volonté, là je sonst qui doppelten Backslashes oui pas wiederfinde...
qui Umwandler schlägt automatisch trop, si rien trouvé wurde - mais seulement un Anzeigevergleich.
qui Ergebnisse volonté dans den Editor geladen, qui sich chez *.TXT pour zuständig hält (ShellExec).
!
RegEx_Tester
ab XProfan 10
Set("Escape",0)
Déclarer CR$, Qu$
CR$ = Chr$(13) + Chr$(10) Zeilenende
Qu$ = Chr$(34) Doppelte Anführungszeichen
========== Suchmuster et Beispiele ==========
Déclarer 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$
Déclarer 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$
Déclarer 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" oui, cela liebe Euro-marque...
Déclarer Tel_Muster$, Tel_Test$
Tel_Muster$ = "(~+~d *)?(~(~d+~) *)?~d+(-~d*)*"
Tel_Test$ = "Phone of AlkorSoft (project PayCash) is +7(812) 329-44-69"
Déclarer Url_Muster$, Url_Test$
Url_Muster$ = "(?i)" + ignoriere large/petite
"((FTP|HTTPS|HTTP)://|www~.)" + Protokoll (sans: www.)
"([~w~d~-]+:[~w~d~-]+@)?" + User / Mot de passe
"([^/~r~n:]+)" + TCP Adresse ou bien Domainname
"(:~d{1,5})?" + Portnummer
"(((/[%+~w~d~-~.]*)+)*)" + Unix-Pfad
"(~?[^~s=&]+=[^~s=&]+(&[^~s=&]+=[^~s=&]+)*)?" + Abfrage- (GET) paramètre
"(#[~w~d~-%+]+)?" HTML-ancre (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
s'il te plaît tenir compte de: qui transformateur funktioniert seulement, si qui Escapezeichen ausgeschaltet sommes !!!
aussi qui reguläre Ausdruck doit avec Set("Escape",0) erfaßt worden son.
Sonderfall: Doppelte Anführungszeichen im String ersetzt on per main dans q, cela
wird ensuite ici wieder geändert.
RegEx-Escapezeichen:
xnn marque avec dem Hex-Code nn (ASCII-Text)
x{nnnn} marque avec dem Hex-Code nnnn (un Byte pour ASCII-Text et deux Bytes pour Unicode-marque
un tabulateur (HT/TAB), gleichbedeutend comment x09
Zeilenvorschub (NL), gleichbedeutend comment x0a
Wagenrücklauf (CR), gleichbedeutend comment x0d
f Seitenvorschub (FF), gleichbedeutend comment x0c
a Alarm (bell) (BEL), gleichbedeutend comment x07
e Escape (ESC), gleichbedeutend comment x1b
\ Backslash selbst (behandelt qui transformateur)
q XProfan: Doppelte Anführungszeichen (behandelt qui transformateur)
vordefinierte Klassen:
w un alphanumerisches marque inclusivement "_"
W ne...aucune alphanumerisches marque, aussi ne...aucune "_"
d un numerisches marque
D ne...aucune numerisches marque
s irgendein wörtertrennendes marque (entspricht [
f])
S ne...aucune wörtertrennendes marque
Wortgrenzen:
findet une Wortgrenze (wohin w à W grenzt)
B findet alles ausser einer Wortgrenze
Modifikatoren:
(?i) Führe qui cherche Schreibweisen-unabhägig par
(?m) Behandle den Zielstring comme mehrzeiligen String. cela bedeutet, ändere
qui Bedeutungen de "^" et "$": Statt seulement den Anfang ou bien cela Ende des
Zielstrings trop trouver, wird chacun Zeilenseparator dedans eines Cordes
erkannt (beachte aussi qui Zeilenseparatoren)
(?s) Behandle den Zielstring comme einzelne la ligne. cela bedeutet, dass "." chaque
beliebige marque findet, sogar Zeilenseparatoren, qui es normalement pas findet.
(?g) Modifikator pour den "Genügsam"-Modus. par cela Ausstellen volonté alle folgenden
Operatoren dans den "Genügsam"-Modus geschaltet. Standardmassig sommes alle Operatoren
"gierig". si alors qui Modifikator (?-g) aus ist, ensuite arbeitet + comment +?, * comme *? etc.
Kommentar:
(?#text) "text" ist Kommentar (darf aucun schliessende Klammer beinhalten).
Paramètres dans$
Déclarer out$, i%
out$ = Translate$(dans$,"\",Chr$(250)) räume alle Doppel-Backslashes aus dem Weg
out$ = Translate$(out$,"q",Chr$(34)) Sonderfall doppelte Anführungszeichen
out$ = Translate$(out$,»,"~") ändere cela Escapezeichen
out$ = Translate$(out$,Chr$(250),») lieu den gewünschten Backslash wieder 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]")
Retour out$
ENDPROC
Proc ZeigMal
Paramètres Text$
Déclarer f$, hF&, B#
f$ = $TempDir + "TEMP_RegEx_Tester.txt"
Faible B#,Len(Text$)+1
String B#,0 = Text$
BlockWrite f$,B#,0,Len(Text$) Erstelle temp. Dossier...
Dispose B#
ShellExec(f$,"open",1) zeige vous à...
Repeat
hF& = FindWindow( "TEMP_RegEx_Tester" ) attends jusqu'à cela la fenêtre là ist...
Until hF& <> 0
Effacer f$ et entferne qui Dossier wieder. avec dem Editor peux cela Ergebnis quand même gesichert volonté.
ENDPROC
Proc RegEx_Tester
Paramètres RegEx$, Text$
Déclarer Erg$, s$, RestText$, Offset&, oldDeci%, index%
oldDeci% = Set("Décimal",0)
Offset& = 1
RestText$ = Text$
Si Len(Text$) < 80
Erg$ = "Suchtext: " + Qu$ + Text$ + Qu$ + CR$
Erg$ = Erg$ + Space$(11) +
Si(Len(Text$) >= 10,
$ MkStr("1234567890",Len(Text$) 10) + Left $("1234567890",Len(Text$) mod 10),
Left $("1234567890",Len(Text$) mod 10)) + CR$ + CR$
D'autre
Erg$ = "Suchtext:" + CR$ + Text$ + CR$ + CR$
EndIf
Erg$ = Erg$ + "regulärer Ausdruck:" + CR$ + RegEx$ + CR$ + CR$
Erg$ = Erg$ + "Ergebnis:" + CR$
s$ = Match$(RegEx$,RestText$)
Tandis 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 $(Text$,Offset&,Len(Text$))
s$ = Match$(RegEx$,RestText$)
Endwhile
Si non index%
Erg$ = Erg$ + "*** aucun Treffer ***" + CR$ + CR$
Erg$ = Erg$ + "Wurden peut-être qui Escapezeichen pas ajusté? ici une la comparision." + CR$
Erg$ = Erg$ + "alt: " + Qu$ + RegEx$ + Qu$ + CR$
Erg$ = Erg$ + "neu: " + Qu$ + RegEx_Umformer( RegEx$ ) + Qu$ + CR$
EndIf
Set("Décimal",oldDeci%)
Retour Erg$
ENDPROC
========== Hauptprogramm ==========
ZeigMal RegEx_Tester( "(?i)[e]+","Proc RegEx_Tester" )
ZeigMal RegEx_Tester( "(w+)?","Proc RegEx_Tester" ) zum 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$ )
Set("Escape",1)
Fin
belle Grüße Michael Wodrich |
|