Deutsch
Quelltexte/ Codesnippets

Einige Match Suchmuster

 

Nico
Madysa
Ab XProfan10 gibt es den Befehl Match$, mit dem geprüft wird, ob ein Sting einem bestimmten Muster entspricht, also z.B. zuerst ein Großbuchstabe kommt, dann 3 Kleinbuchstaben, ein Leerzeichen und danach 3 Ziffern. Ich habe hier einiges gesammelt mit einem kleinen Beispielprogramm:
KompilierenMarkierenSeparieren
Def $Name   "[A-ZÄÖÜ]([a-zäöü]+|~.)(~-[A-ZÄÖÜ]([a-zäöü]{2,}|~.))* [A-ZÄÖÜ]([a-zäöü]+|~.)(~-[A-ZÄÖÜ]([a-zäöü]{2,}|~.))*"
Def $Time   "((0|1|)[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?"
Def $Vorw   "[1-9][0-9]{1,4}"
Def $Telnum "[1-9][0-9]{4,7}"
Def $Url    "(https://)?(www~.)?[^@|²³.]{1,}(~.[^@|²³  .]{2,3}){1,3}"
Def $Street "([A-Z][a-z]{2,}~.? )+(0[1-9][0-9]*|[1-9][0-9]*)"
Def $Plz    "[0-9]{5} [A-Z][a-z]{2,}"
Def $RoemM  "M*"
Def $RoemC  "(C[DM]|C[DM]|D?C{0,3})?"
Def $RoemX  "(X[LC]|X[LC]|L?X{0,3})?"
Def $RoemI  "(I[VX]|I[VX]|V?I{0,3})?"
Declare E& , T& , Roem$ , Addr$ , Tel$ , XTel$
Roem$ = "^" + $Roemm + $Roemc + $Roemx + $Roemi + "$"
Addr$ = "^" + $Name + "(
|[,;] )" + $Street + "(
|[,;] )" + $Plz + "$"
Tel$  = "^(0"+$Vorw+"/)?"+$Telnum+"$"
XTel$ = "^((~+49 ("+$Vorw+"|~(0"+$Vorw+"~))|0049 "+$Vorw+"|~(0049 "+$Vorw+"~)|0"+$Vorw+"|~(0"+$Vorw+"~)) )?"+$Telnum+"$"
+49 30 12345678
+49 (030) 12345678
0049 30 12345678
(0049 30) 12345678
030 12345678
(030) 12345678
12345678
Window 300 , 200 - 200 , 200
Cls External("User32","GetSysColor",15)
E& = Create("MultiEdit",%Hwnd,"",5,05,180,(-20))
T& = Create("Text",%Hwnd,"",5,30,180,160)

Whilenot IsKey(27)

    Waitinput
    Match$(XTel$,Gettext$(E&))<- Addr$ durch zu testende Konstante/Variable ersetzen

    If %Matchpos >= 0

        Settext T& , $Match

    Else

        Settext T& , "ungültig"

    Endif

Wend


$Name = Vorname + Nachname Doppelnamen sind mittels Bindestrich möglich
$Time = hh:mm oder hh:mm:ss
$URL = Internetadresse, z.B. [...]  leider auch www.de
$Street = Straßenname + Hausnummer, z.B. Str. des Friedens 1
$PLZ = Postleitzahl + Ort, z.B. 02979 Burghammer
Roem$ = Römischess Zahlzeichen, z.B. CXVII
Addr$ = komplette Adresse, durch Chr$(13), Komma oder Semikolon getrennt.
Tel$ = Festnetznummer, auch mit Vorwahl möglich, z.B. 011111/99999
XTel$ = erweiterte Festnetznummer, folgende Formate sind möglich:
+49 30 12345678
+49 (030) 12345678
0049 30 12345678
(0049 30) 12345678
030 12345678
(030) 12345678
12345678
Kritik und Meinung sind ausdrücklich erwünscht.
 
Nico Madysa
09.06.2006  
 




Clemens
Meier
PLZ immer mit einer 0 beginnend? Schade, meine Stadt wird ausgeschlossen
 
XProfan 9.1; XP SP2; FF; Editpad
10.06.2006  
 




Michael
Wodrich
TelefonNr geht nicht:
0451/...

weil[quote:fa121d580d]
Capture
0
Any character in 1-9
Exactly 5 times
/
End Capture
? (zero or one time)
Any character in 1-9
Exactly 5 times
[/quote:fa121d580d]
url geht auch nicht

[quote:fa121d580d]Capture [...] 
End Capture
? (zero or one time)
Capture
www~
. (any character)
End Capture
? (zero or one time)
Any character not in @|²³~~~.
+ (one or more times)
~
. (any character)
Any character not in @|²³~~
At least 2, but not more than 3 times
Capture
~
. (any character)
Any character not in @|²³~~
At least 2, but not more than 3 times
End Capture
? (zero or one time)
[/quote:fa121d580d]
und so weiter

PLZ

[quote:fa121d580d]0
Any character in 1-9
Exactly 4 times
(space)
Any character in A-Z
Any character in a-z
At least 2 times
[/quote:fa121d580d]
Kontrolliert mit The Regulator - freie Version

[...] 
[...] 
 
Programmieren, das spannendste Detektivspiel der Welt.
10.06.2006  
 




Nico
Madysa
Also ich bin ja schon mal glücklich, dass bei den römischen Zahlen keine Fehler aufgetaucht sind.(Die haben mich fast in den WAHNSINN getrieben!).
[quote:9180e9b2ca]
PLZ immer mit einer 0 beginnend? Schade, meine Stadt wird ausgeschlossen
[/quote:9180e9b2ca]
Sorry, ich bin davon ausgegangen, PLZs begännen grundsätzlich mit einer 0.

[quote:9180e9b2ca]
TelefonNr geht nicht: 0451/...
[/quote:9180e9b2ca]
Das selbe in Grün. In den Minuten des Zusammenschreibens ging ich davon aus,
Vorwahlen hätten grundsätzlich 5 Ziffern.(Ich hatte einfach ein Brett vorm Kopf.)

@ Michael: Dein Regulator berücksichtigt nicht, dass in den regülären Ausdrücken von XProfan das Tilde(~) das Escape-Zeichen ist und nicht der Backslash().
Bei mir hat url funktioniert, abgesehen von der Macke, dass auch w w w . d e als URL durchgeht. (Ich habe w w w . d e gesperrt, damit nicht stattdessen dieses [...] angezeigt wird.)

Hier ist jetzt eine überarbeitete Version:
KompilierenMarkierenSeparieren
Def $Name "[A-ZÄÖÜ]([a-zäöü]+|~.)(~-[A-ZÄÖÜ]([a-zäöü]{2,}|~.))* [A-ZÄÖÜ]([a-zäöü]+|~.)(~-[A-ZÄÖÜ]([a-zäöü]{2,}|~.))*"
Def $Time "((0|1|)[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?"
Def $Tel "(0[1-9][0-9]{2,3}/)?[1-9][0-9]{6}"
Def $Url  "(https://)?(www~.)?[^@|²³~~~.]{1,}(~.[^@|²³~~~.]{2,3}){1,3}"
Def $Street "([A-Z][a-z]{2,}~.? )+(0[1-9][0-9]*|[1-9][0-9]*)"
Def $Plz  "[0-9]{5} [A-Z][a-z]{2,}"
Def $Roemm "M*"
Def $Roemc "(C[DM]|C[DM]|D?C{0,3})?"
Def $Roemx "(X[LC]|X[LC]|L?X{0,3})?"
Def $Roemi "(I[VX]|I[VX]|V?I{0,3})?"
Declare E& , T& , Roem$ , Addr$
Roem$ = "^" + $Roemm + $Roemc + $Roemx + $Roemi + "$"
Addr$ = "^" + $Name + "(
|[,;] )" + $Street + "(
|[,;] )" + $Plz + "$"
Window 300 , 200 - 200 , 200
Cls External("User32","GetSysColor",15)
E& = Create("MultiEdit",%Hwnd,"",5,05,180,(-20))
T& = Create("Text",%Hwnd,"",5,30,180,160)

Whilenot Iskey(27)

    Waitinput
    Match$(Addr$,Gettext$(E&))<- Addr$ durch zu testende Konstante/Variable ersetzen

    If %Matchpos >= 0

        Settext T& , $Match

    Else

        Settext T& , "ungültig"

    Endif

Wend


EDIT: Habe jetzt diesen Beitrag editiert, da ich wegen einem Fehler nicht noch alles nochmal reinstellen wollte. Danke an Clemens für die Richtigstellung meiner Vorstellung von Telefonnummern. ;D
 
Nico Madysa
12.06.2006  
 




Clemens
Meier
Schon beim Überfliegen erneut einen Fehler gesehen bei der Telefonnummer. Die Vorwahl 07402 wäre nach deinem Ausdruck nicht möglich.

Richtig, die 0 steht an erster Stelle. an 2. Stelle 1-9, danach Zahlen von 0-9

Musst also den Ausdruck noch etwas erweitern.

Bei dem Hauptanschluß analog, an erster Stelle 1-9, danach Zahlen von 0-9:

Def $Tel (0[1-9]{3,4}/)?[1-9]{5} ist also falsch (und zu kurz hinten, meine passt da schon nicht rein)
Richtig oder zum mindest besser:
Def $Tel (0[1-9][0-9]{2,3}/)?[1-9][0-9]{6}

Weitere mögliche Fehler dürfen nun auch andere suchen
 
XProfan 9.1; XP SP2; FF; Editpad
12.06.2006  
 



Folgende Angabemöglichkeiten für Telefonnummern sind typisch:

Ich nehme jetzt mal die Berliner Vorwahl 030
+49 30 12345678
+49 (030) 12345678
0049 30 12345678
(0049 30) 12345678
030 12345678
(030) 12345678
12345678

Oft genutzte Sonderzeichen in Teleangaben sind +-()[] /.
 
12.06.2006  
 




Clemens
Meier
Die 4. Variante kannte ich nicht. Aber insgesamt ein guter Ansatz um einen kompletten Ausdruck zu formulieren.
 
XProfan 9.1; XP SP2; FF; Editpad
12.06.2006  
 



[quote:926ddf29a9=Clemens Meier]Die 4. Variante kannte ich nicht. Aber insgesamt ein guter Ansatz um einen kompletten Ausdruck zu formulieren.[/quote:926ddf29a9]
Du hast schon recht - die 4. Variante ist eher selten, aber vorhanden:  [...] 
 
12.06.2006  
 




RGH
Außerdem setzt sich immer mehr die internationale Schreibweise mit Bindestrich durch:

+49-30-1234567
+4930-1234567

oder gar ohne alle Trennzeichen (wird gerne auch bei Handynummern verwandt):

+49301234567

Nicht zu vergessen die Versionen mit 00 statt +.

Am besten sollte man Leerzeichen, Bindestriche und Klammern einfach ausfiltern. Es könnten ja bei Nenenstellenanlagen noch weitere Bestandteile folgen:

+49-30-123456-78

Gruß
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
12.06.2006  
 




Michael
Wodrich
Habe beim Regulator wohl nicht konvertiert??!?

Aber das kann man ja von Hand nachholen. Bei der Prüfung fällt übrigens auf, das man nicht mit den runden Klammern so herumwerfen sollte. Die haben nämlich eine ganz klare eigene Funktion.

Die regulären Ausdrücke also bitte ohne die runden Klammern.

Schöne Grüße
Michael Wodrich
 
Programmieren, das spannendste Detektivspiel der Welt.
13.06.2006  
 




Clemens
Meier
[quote:3a4ca13962=Michael Wodrich]
Die regulären Ausdrücke also bitte ohne die runden Klammern.
[/quote:3a4ca13962]
Verstehe ich nicht, wie kann man reguläre Ausdrücke ohne runde Klammern erstellen. Die sind ein absolutes Muss um sogenannte Subpattern zu bilden.
 
XProfan 9.1; XP SP2; FF; Editpad
13.06.2006  
 




Michael
Wodrich
Richtig, der Name fiel mir nicht so schnell ein...
 
Programmieren, das spannendste Detektivspiel der Welt.
13.06.2006  
 




Zum Quelltext


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

11.283 Betrachtungen

Unbenanntvor 0 min.
RudiB.28.08.2022
Walter03.12.2020
Andre Rohland08.09.2018
Peter Max Müller23.11.2017
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie