Reguläre Ausdrücke - Muster erkennen

Reguläre Ausdrücke - Muster erkennen

am 02.09.2006 19:21:14 von Dennis Kort

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

/{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

am 02.09.2006 19:25:27 von Paul Hink

Dennis Kort wrote:

> 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
>
> /.{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

am 03.09.2006 00:23:31 von Michael Strauss

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

am 03.09.2006 00:59:56 von Dennis Kort

Hat funktioniert! Danke Paul.

Re: Reguläre Ausdrücke - Muster erkennen

am 03.09.2006 01:59:33 von Paul Meier

Paul Hink schrieb:
> Dennis Kort wrote:
>
>
>>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
>>
>>/.{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+/ könnte eine Lösung sein, wenn die Menge
der Buchstaben eingeschränkt 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

am 03.09.2006 04:15:17 von Paul Hink

Paul Meier wrote:
> Paul Hink schrieb:
>> Dennis Kort wrote:
>>
>>> 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
>>>
>>> /.{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+/ 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.

Paul

Re: Reguläre Ausdrücke - Muster erkennen

am 03.09.2006 19:10:11 von Ferry Bolhar

Dennis Kort:

> 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
>
> /.{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 regulären Ausdrücken gefährlich sein (im
Hinblick auf die Brauchbarkeit der erhaltenen Lösungsvorschläge :-).

Zunächst: was ist ein "Buchstabe"? Ein alphabetisches Zeichen? Oder
zählen auch Ä,Ö,Ü usw. dazu? Groß- und Kleinschreibung?

Und "am Anfang"? Am Anfang wovon? Von einem Satz, einem Wort,
einer Zeile?

Unter der Annahme, dass du Wortanfänge 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!) möchtest.

Bei regulären Ausdrücken ist es oft wichtig, sich beim Formulieren
auch zu überlegen, was _nicht_ gefunden werden soll.

> Bestimmt ist die Lösung ganz einfach und ich würde mich über
> Vorschläge freuen.

Wie du siehst, ist sie gar nicht so einfach.

LG, Ferry

Re: Reguläre Ausdrücke - Muster erkennen

am 03.09.2006 20:11:24 von Paul Meier

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+/ 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*

1. Warum am Zeilenanfang?
2. Warum am Zeilenende?
3. Warum nur Kleinbuchstaben?


P.

Re: Reguläre Ausdrücke - Muster erkennen

am 03.09.2006 20:43:43 von Wolf Behrenhoff

Paul Meier schrieb:
> Paul Hink schrieb:
>> 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*
>
> 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 unerwünscht. 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

am 03.09.2006 20:53:43 von hjp-usenet2

On 2006-09-03 18:11, Paul Meier 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@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 erkennen

am 03.09.2006 21:51:37 von Ralf Muschall

Ferry Bolhar schrieb:

> Zunächst: was ist ein "Buchstabe"? Ein alphabetisches Zeichen? Oder
> zählen auch Ä,Ö,Ü usw. dazu? Groß- und Kleinschreibung?

Wenn er sich darüber keine Gedanken machen will, geht

/^[[:alpha:]]{2}[[:digit:]]+$/

, dann macht sich der Rechner welche.

> /\b[a-z]{2}\d+/i

Ich würde am Ende nochmal \b reintun, sicherheitshalber
(falls man explizit etwas anderes meint oder beim Testen
allgemeinere, aber erwünschte Fälle auftreten, kann man
es immer noch ändern).

Ralf

Re: Reguläre Ausdrücke - Muster erke nnen

am 03.09.2006 23:05:44 von Helmut Wollmersdorfer

Peter J. Holzer wrote:
> On 2006-09-03 18:11, Paul Meier 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

am 03.09.2006 23:19:09 von Helmut Wollmersdorfer

Ferry Bolhar wrote:

> Zunächst: was ist ein "Buchstabe"?

= Letter?

> Ein alphabetisches Zeichen?

Wo ist jetzt der Unterschied zu Letter?

> Oder
> zählen auch Ä,Ö,Ü usw. dazu?

Das sind auch Letter.

Helmut Wollmersdorfer

Re: Reguläre Ausdrücke - Muster erke nnen

am 03.09.2006 23:48:01 von Paul Meier

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

am 04.09.2006 16:49:16 von Ferry Bolhar

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.
\w erkennt zB. Umlaute nicht, wenn die Locale nicht passt.
Und die in den Lösungsbeispielen angeführten Zeichenklassen
[A-Z] bzw. [a-z] sowieso nicht. Insofern ist [[:alpha:]] sicher
eine gute Wahl, aber auch dann muss u.U noch näher geklärt
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, dürften 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@adv.magwien.gv.at

Re: Reguläre Ausdrücke - Muster erkennen

am 11.09.2006 22:18:44 von Ralf Muschall

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