regexp ausschließlichkeit
Dracherl
- perl
Hallo
Ich möchte ein Formularfeld abprüfen
In diesem sollen ausschließlich Zeichenketten des Musters
\w\w\w\w\b
vorkommen.
Dies
$a =~ /^\w{4}\b/g
prüft aber natürlich nur ob es einmal vorkommt - mein Prob ist - es soll
nichts anderes als genau diese Muster vorkommen ...
Hintergrund (wen's interessiert):
Es geht um eine Liste von Flughäfen deren "ICAO"-Code
(internationaler Kurzbezeichner) aus genau vier Zeichen besteht
eddf=frankfurt/M, essa=Stockholm Arlanda, egll=London Heathrow etc.
Hinterher wird ein Array draus - ich könnte es auch umständlich hinkriegen.
Aber das muß doch schneller gehen ... ich wälz hier Bücher,
aber bin nicht fündig geworden
;(
Danke!
hi!
Ich möchte ein Formularfeld abprüfen
In diesem sollen ausschließlich Zeichenketten des Musters
\w\w\w\w\b
vorkommen.
Man könnte es vielleicht ungefähr so lösen:
=== cut ===
my $input = "aaaa bbbb cccc";
$result = grep { !/^\w{4}$/ } split / /, $input;
=== cut ===
In $result steht anschließend die Anzahl der Codes, die nicht mit dem
gewünschten Format übereinstimmen.
Erläuterung: split trennt die Eingabe an Leerzeichen auf. Dort kannst
du natürlich auch jedes andere Trennzeichen einsetzen, wenn du andere
benötigst. grep sucht anschließend alle Codes, die nicht dem regulären
Ausdruck in den geschweiften Klammern entsprechen. Im skalaren Kontext
liefert das die Anzahl dieser Elemente. Wenn $result also am Ende 0
ist, enthält deine Eingabe nur erlaubte Codes, ansonsten enthält
$result die Anzahl der unerlaubten Codes.
Wenn du $result durch @result ersetzt, erhälst du ein Array der falsch
formatierten Codes.
bye, Frank!
=== cut ===
my $input = "aaaa bbbb cccc";
$result = grep { !/^\w{4}$/ } split / /, $input;
=== cut ===
thx - aber das war was ich mit "umständlich" meinte.
den split brauch ich für die liste später eh.
Ich dachte an etwas in der Form wie ich Zeichenklassen mit [^äöü]
ausschließen kann,
etwas wie
/[^(\w{4}\b)]/g
oder so ähnlich (das funktioniert so nicht - weiß ich)
Sprich so wie man
nach "etwas" sucht möchte ich nach 'etwas, das anders ist als "etwas"' suchen
Hallo Dracherl,
Dies
$a =~ /^\w{4}\b/g
prüft aber natürlich nur ob es einmal
vorkommt - mein Prob ist - es soll
nichts anderes als genau diese Muster
vorkommen ...
Dann mach das doch so:
if($a !~ m/^\w{4}\b(\w{4}\b)*$/) {
die 'Du Sack!';
}
Gruesse,
CK
if($a !~ m/^\w{4}\b(\w{4}\b)*$/) {
die 'Du Sack!';
}
Funkst net ;(
"aaaa aaaa" matched net
#!/usr/bin/perl
use strict;
my $a;
while($a ne "quit" || $a ne "bye"){
print "String eingeben !\n";
$a = <STDIN>;
chop($a);
if($a !~ m/^\w{4}\b(\w{4}\b)*$/) {print "\n '$a' Passt nicht ! \n";}
else{print "\n '$a' Passt ! \n";}
}
exit;
Hallo Dracherl,
if($a !~ m/^\w{4}\b(\w{4}\b)*$/) {
die 'Du Sack!';
}Funkst net ;(
"aaaa aaaa" matched net
Natuerlich nicht. Du hast nix von
Leerzeichen gesagt ;) Laesst sich aber
leicht einfuegen:
if($a !~ m/^\w{4}( \w{4})*$/) {
die 'Du Sack!';
}
Gruesse,
CK
Natuerlich nicht. Du hast nix von
Leerzeichen gesagt ;) Laesst sich aber
leicht einfuegen:
Na ja - irgendwie muß ich sie ja trennen ;))
(das wollt ich mit dem \b andeuten)
Das sieht jedenfalls sehr gut aus
;))
Vielen Dank!
P.S. aber jetzt wo ich's so seh, denk ich, in wachem
Zustand hätte ich auch selbst drauf kommen können.
Ich glaub ich geh ins Bett
gute Nacht!
Hi,
if($a !~ m/^\w{4}( \w{4})*$/) {
ich würd nach dem Leerzeichen noch ein + angeben, dann funktioniert es auch noch, wenn mal jemand 2 oder mehr Leerzeichen reinhaut...
cu,
Andreas