reguläre ausdrücke /[\d]{N,M}/
perl_anfänger
- perl
hallo
probiere mich gerade an regulären ausdrücken
folgender code sollte meiner meinung nach folgendes ausgeben:
X quatsch
X999 gefunden
9999 quatsch
es wird aber:
X quatsch
X999 gefunden
9999 gefunden
ausgegeben.... warum??
vielen dank für eure mühe
foreach("X","X999","9999"){
if(/[\d]{1,2}/){
print "$_ gefunden\n";
}
else{
print "$_ quatsch\n";
}
}
Hallo perl_anfänger,
vielen dank für eure mühe
foreach("X","X999","9999"){
if(/[\d]{1,2}/){
print "$_ gefunden\n";
}
else{
print "$_ quatsch\n";
}
}
Dein RegEx sagt 'ein String, der *an einer beliebigen Stelle*
ein oder zwei Zahlen enthaelt'. Der erste String enthaelt
keine Zahl. Der zweite enthaelt sowohl eine als auch zwei
Zahlen. Der Dritte enthaelt auch sowohl eine als auch zwei
Zahlen. Der Ausdruck matcht also auf String 2 und 3. Btw.
brauchst du die Zeichenklasse in diesem Fall nicht.
/\d{1,2}/
haette es genau so getan.
Gruesse,
CK
Hi CK
foreach("X","X999","9999"){
if(/[\d]{1,2}/){
print "$_ gefunden\n";
}
else{
print "$_ quatsch\n";
}
}Dein RegEx sagt 'ein String, der *an einer beliebigen Stelle*
ein oder zwei Zahlen enthaelt'. Der erste String enthaelt
keine Zahl. Der zweite enthaelt sowohl eine als auch zwei
Zahlen.
er enthält aber doch drei zahlen... ich dachte, die zweite zahl würde das maximum anzeigen...
folgendes wäre u.a. bei /[0-9]{1,2}/ok:
1
11
nicht ok:
111
oder verstehe ich da was falsch?
Hallo perl_anfänger,
er enthält aber doch drei zahlen...
Na und?
ich dachte, die zweite zahl würde das maximum anzeigen...
Ja, aber der RegEx muss nicht auf den kompletten String
matchen, sondern nur auf einen Teilstring. Wenn er auf den
kompletten String matchen soll, benutze ^ und $.
Gruesse,
CK
Hallo Christian,
er enthält aber doch drei zahlen...
Na und?
Ehm ... und warum enthält er dann doch nur zwei Zahlen?
ich dachte, die zweite zahl würde das maximum anzeigen...
Ja, aber der RegEx muss nicht auf den kompletten String
matchen, sondern nur auf einen Teilstring. Wenn er auf den
kompletten String matchen soll, benutze ^ und $.
Cool.
Jetzt weiss aber echt jeder der das Wort Perl buchstabieren kann, wovon du spichst. Oder?
Ein klein wenig mehr Erklärung wäre doch echt nicht schlecht.
Vielleicht sogar der richtige RegEx mit einer Erklärung?
Wäre doch mal was anderes, oder?
Grüße
Thomas, der selbst gerne Perl können würde
Hallo,
er enthält aber doch drei zahlen...
Na und?
Ehm ... und warum enthält er dann doch nur zwei Zahlen?
Er enthält unter anderm auch zwei Zahlen X[99]9 bzw. X9[99].
Jetzt weiss aber echt jeder der das Wort Perl buchstabieren kann, wovon du spichst. Oder?
Ein klein wenig mehr Erklärung wäre doch echt nicht schlecht.
Vielleicht sogar der richtige RegEx mit einer Erklärung?
Wäre doch mal was anderes, oder?
/\d{1,2}/ sagt aus, daß im String _irgendwo_ eine einzelne oder zwei Ziffer hintereinander vorkommen müssen, um ein positives Matching zu erreichen. Wo und ob mehrere vorkommen ist vollkommen egal.
/^\d{1,2}$/ sagt aus, daß der String nur aus einer oder zwei Zffern bestehen darf. Das ^ steht für String-Anfang und das $ für String-Ende.
Bei dem Eingangs erwähnten Beispiel gäbe es durchaus mehrere Möglichkeiten, eine gültige Regex zu formulieren. Die verwendete (/\d{1,2}/ ist für das gewünshcte Ergebnis einfach nur zu ungenau. /^X\d{1,2}/, /\D\d{1,2}/, /[1]\d{1,2}/ oder Variantionen wie /^\D+\d{1,2}.$/ wären einige Ausdrücke aber sicherlich nicht alle.
Wichtig bei der Formulierung einer Regex ist imho, daß man den potentiellen Aufbau des Strings sehr genau kennt.
ICh schreibe hier einmal einige Klartextformulierungen auf, so wie ich die obigen Ausdrücke interpretieren würde:
/^X\d{1,2}/: Beginnt mit großem X, gefolgt von einer oder zwei Ziffern, der Rest ist egal
/\D\d{1,2}/: Beginnt mit einer Nicht-Ziffer, gefolgt von einer oder zwei Ziffern, der Rest ist egal
/[2]\d{1,2}/: Beginnt mit Großbuchstaben, gefolgt von einer oder zwei Ziffern, der Rest ist egal
/^\D+\d{1,2}.$/: Beginnt mit nindestens einer Nicht-Ziffer, gefolgt von einer oder zwei Ziffern und einem beliebigen Zeichen.
Thomas, der selbst gerne Perl können würde
Das ist zwar kein ausschließliches Perl-Thema, aber vielleicht hilft ja http://www.perldoc.com/perl5.6/pod/perlre.html bzw. http://www.perldoc.com/perl5.6/pod/perlfaq6.html etwas weiter.
Grüße
Klaus
Hallo,
er enthält aber doch drei zahlen...
Na und?
Ehm ... und warum enthält er dann doch nur zwei Zahlen?Er enthält unter anderm auch zwei Zahlen X[99]9 bzw. X9[99].
Jetzt weiss aber echt jeder der das Wort Perl buchstabieren kann, wovon du spichst. Oder?
Ein klein wenig mehr Erklärung wäre doch echt nicht schlecht.
Vielleicht sogar der richtige RegEx mit einer Erklärung?
Wäre doch mal was anderes, oder?/\d{1,2}/ sagt aus, daß im String _irgendwo_ eine einzelne oder zwei Ziffer hintereinander vorkommen müssen, um ein positives Matching zu erreichen. Wo und ob mehrere vorkommen ist vollkommen egal.
/^\d{1,2}$/ sagt aus, daß der String nur aus einer oder zwei Zffern bestehen darf. Das ^ steht für String-Anfang und das $ für String-Ende.
Bei dem Eingangs erwähnten Beispiel gäbe es durchaus mehrere Möglichkeiten, eine gültige Regex zu formulieren. Die verwendete (/\d{1,2}/ ist für das gewünshcte Ergebnis einfach nur zu ungenau. /^X\d{1,2}/, /\D\d{1,2}/, /[1]\d{1,2}/ oder Variantionen wie /^\D+\d{1,2}.$/ wären einige Ausdrücke aber sicherlich nicht alle.
Wichtig bei der Formulierung einer Regex ist imho, daß man den potentiellen Aufbau des Strings sehr genau kennt.
ICh schreibe hier einmal einige Klartextformulierungen auf, so wie ich die obigen Ausdrücke interpretieren würde:/^X\d{1,2}/: Beginnt mit großem X, gefolgt von einer oder zwei Ziffern, der Rest ist egal
/\D\d{1,2}/: Beginnt mit einer Nicht-Ziffer, gefolgt von einer oder zwei Ziffern, der Rest ist egal
/[2]\d{1,2}/: Beginnt mit Großbuchstaben, gefolgt von einer oder zwei Ziffern, der Rest ist egal
/^\D+\d{1,2}.$/: Beginnt mit nindestens einer Nicht-Ziffer, gefolgt von einer oder zwei Ziffern und einem beliebigen Zeichen.
Thomas, der selbst gerne Perl können würde
Das ist zwar kein ausschließliches Perl-Thema, aber vielleicht hilft ja http://www.perldoc.com/perl5.6/pod/perlre.html bzw. http://www.perldoc.com/perl5.6/pod/perlfaq6.html etwas weiter.
Grüße
Klaus
hi klaus,
vielen dank, jetzt habe ich es verstanden
:)
gruss
Hallo Klaus,
Auch ich danke dir! :-)
Grüße
Thomas