Reguläre Ausdrücke - Muster erkennen
Hallo,
ich zerbreche mir den Kopf darüber wie mein Programm erkennen kann ob
ein Wert in folgendem Muster aufgebaut ist:
[zwei buchstaben][eine beliebige Zahl]
also z.B. ab2305.
Ich habe es mit
/=2E{2}[0-9]/
probiert. Allerdings werden dann auch Werte erkannt, die mehr als zwei
Buchstaben am Anfang haben, da ja auch nur ein Teil des Wertes
durchsucht wird (z.B. abc2305).
Bestimmt ist die Lösung ganz einfach und ich würde mich über
Vorschläge freuen.
Grüße
Dennis Kort
Re: Reguläre Ausdrücke- Muster erkennen
Dennis Kort <jackpukk [at] gmail.com> wrote:
> ich zerbreche mir den Kopf darber wie mein Programm erkennen kann ob
> ein Wert in folgendem Muster aufgebaut ist:
>
> [zwei buchstaben][eine beliebige Zahl]
>
> also z.B. ab2305.
>
> Ich habe es mit
>
> /.{2}[0-9]/
>
> probiert. Allerdings werden dann auch Werte erkannt, die mehr als
> zwei Buchstaben am Anfang haben, da ja auch nur ein Teil des Wertes
> durchsucht wird (z.B. abc2305).
Suchst du /^[a-z]{2}[0-9]$/?
Paul
Re: Reguläre Ausdrücke - Muster erkennen
Paul Hink schrieb:
>> [zwei buchstaben][eine beliebige Zahl]
>>
>> also z.B. ab2305.
>>
>
> Suchst du /^[a-z]{2}[0-9]$/?
>
Wohl kaum ;-)
Gru,
Michael Strau
Re: Reguläre Ausdrücke - Muster erkennen
Hat funktioniert! Danke Paul.
Re: Reguläre Ausdrücke - Muster erkennen
Paul Hink schrieb:
> Dennis Kort <jackpukk [at] gmail.com> wrote:
>
>
>>ich zerbreche mir den Kopf darber wie mein Programm erkennen kann ob
>>ein Wert in folgendem Muster aufgebaut ist:
>>
>>[zwei buchstaben][eine beliebige Zahl]
>>
>>also z.B. ab2305.
>>
>>Ich habe es mit
>>
>>/.{2}[0-9]/
>>
>>probiert. Allerdings werden dann auch Werte erkannt, die mehr als
>>zwei Buchstaben am Anfang haben, da ja auch nur ein Teil des Wertes
>>durchsucht wird (z.B. abc2305).
>
>
> Suchst du /^[a-z]{2}[0-9]$/?
>
> Paul
In dieser Zeile wird _ab2305_ nicht gefunden!
Und AB223344 wohl auch nicht.
/[a-zA-Z]{2}\d+/ knnte eine Lsung sein, wenn die Menge
der Buchstaben eingeschrnkt wird.
The anchor "^" means match at the beginning of the string.
Anchor "$" means match at the end of the string,
or before a newline at the end of the string.
*perldoc perlrequick* sollte weiterhelfen.
P.
Re: Reguläre Ausdrücke- Muster erkennen
Paul Meier <pm_mon_ [at] tec2000.de> wrote:
> Paul Hink schrieb:
>> Dennis Kort <jackpukk [at] gmail.com> wrote:
>>
>>> ich zerbreche mir den Kopf darber wie mein Programm erkennen kann
>>> ob ein Wert in folgendem Muster aufgebaut ist:
>>>
>>> [zwei buchstaben][eine beliebige Zahl]
>>>
>>> also z.B. ab2305.
>>>
>>> Ich habe es mit
>>>
>>> /.{2}[0-9]/
>>>
>>> probiert. Allerdings werden dann auch Werte erkannt, die mehr als
>>> zwei Buchstaben am Anfang haben, da ja auch nur ein Teil des Wertes
>>> durchsucht wird (z.B. abc2305).
>>
>> Suchst du /^[a-z]{2}[0-9]$/?
>
> In dieser Zeile wird _ab2305_ nicht gefunden!
Klar, sorry, ich hatte "eine beliebige Ziffer" gelesen und das
Positiv-Beispiel bersehen.
> Und AB223344 wohl auch nicht.
>
> /[a-zA-Z]{2}\d+/ knnte eine Lsung sein,
Das wiederum findet auch (unerwnschterweise) "abc2305".
> wenn die Menge der Buchstaben eingeschrnkt wird.
Wenn die Menge der Buchstaben geeignet eingeschrnkt wird, knnte auch
/^[a-z]{2}[0-9]+$/ eine Lsung sein.
Paul
Re: Reguläre Ausdrücke - Muster erkennen
Dennis Kort:
> ich zerbreche mir den Kopf darber wie mein Programm erkennen kann ob
> ein Wert in folgendem Muster aufgebaut ist:
>
> [zwei buchstaben][eine beliebige Zahl]
>
> also z.B. ab2305.
>
> Ich habe es mit
>
> /.{2}[0-9]/
>
> probiert. Allerdings werden dann auch Werte erkannt, die mehr als zwei
> Buchstaben am Anfang haben, da ja auch nur ein Teil des Wertes
> durchsucht wird (z.B. abc2305).
Deine Formulierung von dem, was du willst, ist in mehrfacher Hinsicht
ungenau, und das kann bei regulren Ausdrcken gefhrlich sein (im
Hinblick auf die Brauchbarkeit der erhaltenen Lsungsvorschlge :-).
Zunchst: was ist ein "Buchstabe"? Ein alphabetisches Zeichen? Oder
zhlen auch ,, usw. dazu? Gro- und Kleinschreibung?
Und "am Anfang"? Am Anfang wovon? Von einem Satz, einem Wort,
einer Zeile?
Unter der Annahme, dass du Wortanfnge meinst und dass mit einem
"Buchstaben" ein alphabetisches Zeichen in Gro- und Kleinschreibung
gemeint ist, sollte
/\b[a-z]{2}\d+/i
ausreichen.
Falls diese Annahme nicht zutrifft, bitte um genauere Angaben, was
du wirklich finden (und nicht finden!) mchtest.
Bei regulren Ausdrcken ist es oft wichtig, sich beim Formulieren
auch zu berlegen, was _nicht_ gefunden werden soll.
> Bestimmt ist die Lsung ganz einfach und ich wrde mich ber
> Vorschlge freuen.
Wie du siehst, ist sie gar nicht so einfach.
LG, Ferry
Re: Reguläre Ausdrücke - Muster erkennen
Paul Hink schrieb:
[...]
>
>
> Klar, sorry, ich hatte "eine beliebige Ziffer" gelesen und das
> Positiv-Beispiel bersehen.
Nicht nur das.
>
>
>>Und AB223344 wohl auch nicht.
>>
>>/[a-zA-Z]{2}\d+/ knnte eine Lsung sein,
>
>
> Das wiederum findet auch (unerwnschterweise) "abc2305".
>
>
>>wenn die Menge der Buchstaben eingeschrnkt wird.
>
>
> Wenn die Menge der Buchstaben geeignet eingeschrnkt wird, knnte auch
> /^[a-z]{2}[0-9]+$/ eine Lsung sein.
_Zur Erinnerung_; Aufgabe war: [zwei buchstaben][eine beliebige Zahl]
*nicht mehr, nicht weniger*
1. Warum am Zeilenanfang?
2. Warum am Zeilenende?
3. Warum nur Kleinbuchstaben?
P.
Re: Reguläre Ausdrücke - Muster erkennen
Paul Meier schrieb:
> Paul Hink schrieb:
>> Wenn die Menge der Buchstaben geeignet eingeschrnkt wird, knnte auch
>> /^[a-z]{2}[0-9]+$/ eine Lsung sein.
>
> _Zur Erinnerung_; Aufgabe war: [zwei buchstaben][eine beliebige Zahl]
>
> *nicht mehr, nicht weniger*
>
> 1. Warum am Zeilenanfang?
> 2. Warum am Zeilenende?
Du musst das Ursprungsposting noch einmal lesen. Dort steht: "Allerdings
werden dann auch Werte erkannt, die mehr als zwei Buchstaben am Anfang
haben, da ja auch nur ein Teil des Wertes durchsucht wird (z.B. abc2305)."
Offenbar ist dies also unerwnscht. Ich hatte also an \b gedacht. Aber -
wie Ferry schon geschrieben hat - ist dies nicht die einzige Unklarheit.
Wolf
Re: Reguläre Ausdrücke- Muster erke nnen
On 2006-09-03 18:11, Paul Meier <pm_mon_ [at] tec2000.de> wrote:
> Paul Hink schrieb:
> [...]
>>>Und AB223344 wohl auch nicht.
>>>
>>>/[a-zA-Z]{2}\d+/ könnte eine Lösung sein,
>>
>> Das wiederum findet auch (unerwünschterweise) "abc2305".
>>
>>>wenn die Menge der Buchstaben eingeschränkt wird.
>>
>>
>> Wenn die Menge der Buchstaben geeignet eingeschränkt wird, könnte auch
>> /^[a-z]{2}[0-9]+$/ eine Lösung sein.
>
> _Zur Erinnerung_; Aufgabe war: [zwei buchstaben][eine beliebige Zahl]
>
> *nicht mehr, nicht weniger*
Und zwar "ob ein Wert nach folgendem Muster aufgebaut ist", nicht
"folgendes Muster enthält".
"abc2305" sollte explizit nicht gematcht werden.
> 1. Warum am Zeilenanfang?
> 2. Warum am Zeilenende?
perldoc perlre.
> 3. Warum nur Kleinbuchstaben?
Warum nur A-Z, und nicht Ö, Ø, Ψ, oder Щ?
hp
--
_ | Peter J. Holzer | > Wieso sollte man etwas erfinden was nicht
|_|_) | Sysadmin WSR | > ist?
| | | hjp [at] hjp.at | Was sonst wäre der Sinn des Erfindens?
__/ | http://www.hjp.at/ | -- P. Einstein u. V. Gringmuth in desd
Re: Reguläre Ausdrücke - Muster erke nnen
Peter J. Holzer wrote:
> On 2006-09-03 18:11, Paul Meier <pm_mon_ [at] tec2000.de> wrote:
>> 3. Warum nur Kleinbuchstaben?
> Warum nur A-Z, und nicht Ö, Ø, Ψ, oder Щ?
Damit der OP nicht herumrätseln braucht:
\p{Alphabetic}
Siehe 'perldoc perlunicode'.
Helmut Wollmersdorfer
Re: Reguläre Ausdrücke - Muster erkennen
Ferry Bolhar schrieb:
> Zunchst: was ist ein "Buchstabe"? Ein alphabetisches Zeichen? Oder
> zhlen auch ,, usw. dazu? Gro- und Kleinschreibung?
Wenn er sich darber keine Gedanken machen will, geht
/^[[:alpha:]]{2}[[:digit:]]+$/
, dann macht sich der Rechner welche.
> /\b[a-z]{2}\d+/i
Ich wrde am Ende nochmal \b reintun, sicherheitshalber
(falls man explizit etwas anderes meint oder beim Testen
allgemeinere, aber erwnschte Flle auftreten, kann man
es immer noch ndern).
Ralf
Re: Reguläre Ausdrücke - Muster erkennen
Ferry Bolhar wrote:
> Zunchst: was ist ein "Buchstabe"?
= Letter?
> Ein alphabetisches Zeichen?
Wo ist jetzt der Unterschied zu Letter?
> Oder
> zhlen auch ,, usw. dazu?
Das sind auch Letter.
Helmut Wollmersdorfer
Re: Reguläre Ausdrücke - Muster erke nnen
Peter J. Holzer schrieb:
[...]
>
> Warum nur A-Z, und nicht �, �, Κ, oder Щ?
Weil die aus der Betrachtung ausgeschlossen waren ;-)
P.
Re: Reguläre Ausdrücke - Muster erkennen
Helmut Wollmersdorfer:
>> Oder
> > zhlen auch ,, usw. dazu?
>
> Das sind auch Letter.
Nicht umbedingt (im Sinne von Perl bzw. generell vom Computer).
Hngt (auch) von der eingestellten Locale ab.
\w erkennt zB. Umlaute nicht, wenn die Locale nicht passt.
Und die in den Lsungsbeispielen angefhrten Zeichenklassen
[A-Z] bzw. [a-z] sowieso nicht. Insofern ist [[:alpha:]] sicher
eine gute Wahl, aber auch dann muss u.U noch nher geklrt
werden, was unter [[:alpha:]] verstanden werden soll.
Darauf wollte ich ja eben hinaus - was ein "Buchstabe" ist, muss
ggf. noch genauer definiert werden. Auch griechische, kyrillische
und arabische Schrifzeichen werden in den jeweiligen Sprachen
zur Wortbildung, dh., als "Buchstaben" verwendet, drften vom
OP aber wohl kaum als solche gemeint worden sein.
LG, Ferry
--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol [at] adv.magwien.gv.at
Re: Reguläre Ausdrücke - Muster erkennen
Ferry Bolhar schrieb:
> Helmut Wollmersdorfer:
>>> Oder
>> > zählen auch Ä,Ö,Ü usw. dazu?
>> Das sind auch Letter.
> Nicht umbedingt (im Sinne von Perl bzw. generell vom Computer).
> Hängt (auch) von der eingestellten Locale ab.
Was IIRC Absicht und IMHO gut ist.
> Darauf wollte ich ja eben hinaus - was ein "Buchstabe" ist, muss
> ggf. noch genauer definiert werden. Auch griechische, kyrillische
> und arabische Schrifzeichen werden in den jeweiligen Sprachen
> zur Wortbildung, dh., als "Buchstaben" verwendet, dürften vom
Weiter draußen gibt es noch seltsamere Buchstaben. Vermutlich
erkennt Perl diejenigen an, die in
/usr/lib/perl/$versionsnummer/unicore/UnicodeData.txt
in der 3. Spalte "Ll", "Lu" oder "Lo" haben (falls man
ein unicodisches System hat).
'ℵ' =~ /[[:alpha:]]/ matscht und "$ℵ₀=42;" geht jedenfalls (letzteres
ist aber gelogen, 42 ist viel größer), und Aleph hat "Lo".
Ralf