Discussion:
[regexp] Repeat-operator redundant. Sehe ich nicht...
(zu alt für eine Antwort)
Michael Uplawski
2024-09-14 06:43:35 UTC
Permalink
Moin.
Meine Frage zielt auf die Interpretation einer Warnmeldung:
---------------
warning: regular expression has redundant nested repeat operator
'*': /Ding:\s(\w*,?(?:\w*)?)/
--------------

Ich brauche Werte aus einer Liste von Paaren, wie diesen:

-------------
Ding: eines, noch_eines.
Mach_das: So, anders, oder_ganz_anders.
-------------

Es muss keine keine Werteliste vorhanden sein, ein Eintrag reicht
auch.

Dabei scheint mir die Regexp
------------------------------------
Ding = /Ding:\s(\w*,?(?:\w*)?)/
-------------------------------------
schon weiter zu helfen. Ich übersetze mal so, wie ich das verstehe:

Suche „Am Anfang Ding mit Doppelpunkt”, danach ein Leerzeichen,
dann merke dir, was nachkommt: ein oder mehrere Wortsymbole,
eventuell ein Komma und eventuell ein oder mehrere weitere
Wortsymbole, die brauche ich aber nicht unbedingt separat vom Rest.

In meiner Doku sind Wortsymbole [a-zA-Z0-9_]

Ich sehe nicht, welcher “repeat-operator” redundant ist.

Tipps?

Cheerio
--
Geh Kaffee kochen!
Tim Landscheidt
2024-09-14 10:35:08 UTC
Permalink
Post by Michael Uplawski
---------------
warning: regular expression has redundant nested repeat operator
'*': /Ding:\s(\w*,?(?:\w*)?)/
--------------
-------------
Ding: eines, noch_eines.
Mach_das: So, anders, oder_ganz_anders.
-------------
Es muss keine keine Werteliste vorhanden sein, ein Eintrag reicht
auch.
Dabei scheint mir die Regexp
------------------------------------
Ding = /Ding:\s(\w*,?(?:\w*)?)/
-------------------------------------
Suche „Am Anfang Ding mit Doppelpunkt”, danach ein Leerzeichen,
dann merke dir, was nachkommt: ein oder mehrere Wortsymbole,
eventuell ein Komma und eventuell ein oder mehrere weitere
Wortsymbole, die brauche ich aber nicht unbedingt separat vom Rest.
In meiner Doku sind Wortsymbole [a-zA-Z0-9_]
Ich sehe nicht, welcher “repeat-operator” redundant ist.
(Ich weiß es nicht, aber) „(?:\w*)“ kann leer sein, das
nachfolgende „?“ macht den Ausdruck optional, das ist also
in jedem Fall doppelt gemoppelt.

Ich würde Dein Muster auch anders formulieren: An dem Anfang
kommt „Ding“ mit Doppelpunkt, danach ein „Leerzeichen“, dann
ein zu merkender Ausdruck aus mindestens einem Wortsymbol,
dann optional mehrere Ausdrücke, die aus einem Komma, einem
„Leerzeichen“ und mindestens einem Wortsymbol bestehen, ge-
folgt von einem Punkt, sprich: Das Komma zu dem nachfolgen-
den Ausdruck zählen.

Damit landet man dann (ungetestet) bei etwas à la
/Ding:\s(\w+)(?:,\s\w+)*\./.

Tim
Michael Uplawski
2024-09-14 12:37:35 UTC
Permalink
Post by Tim Landscheidt
(Ich weiß es nicht, aber) „(?:\w*)“ kann leer sein, das
nachfolgende „?“ macht den Ausdruck optional, das ist also
in jedem Fall doppelt gemoppelt.
So (aber warum) verstehe ich es auch. Dein + hat mehr Sinn.
Post by Tim Landscheidt
Damit landet man dann (ungetestet) bei etwas à la
/Ding:\s(\w+)(?:,\s\w+)*\./.
Ich sehe, was du meinst. Die Punkte verstehe ich aber nicht.
Inzwischen bin ich über französische Akzents gestolpert und komme
mit \w nicht mehr aus.

/Ding:\s(\p{L}+(?:,\p{L}+)*)/

Das sollte mir den Wert auch separat vom Feldnamen liefern. Dass +,
* und ? mir Schwierigkeiten machen, ist eine Konstante.

Herzlichen Dank

Michael
--
Geh Kaffee kochen!
Tim Landscheidt
2024-09-14 19:09:38 UTC
Permalink
Post by Michael Uplawski
[…]
Post by Tim Landscheidt
Damit landet man dann (ungetestet) bei etwas à la
/Ding:\s(\w+)(?:,\s\w+)*\./.
Ich sehe, was du meinst. Die Punkte verstehe ich aber nicht.
[…]
Der erste Punkt ist der Punkt an den Zeilenenden Deiner Bei-
spieldaten:

| -------------
| Ding: eines, noch_eines.
| Mach_das: So, anders, oder_ganz_anders.
| -------------

Der zweite Punkt beendete meinen Satz :-).

Tim
Michael Uplawski
2024-09-15 07:11:26 UTC
Permalink
Tim Landscheidt wrote in de.comp.lang.misc:

aha.
Post by Tim Landscheidt
Der erste Punkt ist der Punkt an den Zeilenenden Deiner Bei-
| -------------
| Ding: eines, noch_eines.
| Mach_das: So, anders, oder_ganz_anders.
| -------------
Der zweite Punkt beendete meinen Satz :-).
Auf dem Niveau ist mir das eingängig. Schönen Sonntag.
Michael Uplawski
2024-09-15 08:08:06 UTC
Permalink
Tim Landscheidt wrote in de.comp.lang.misc:

Aha. ;)
Post by Tim Landscheidt
Der erste Punkt ist der Punkt an den Zeilenenden Deiner Bei-
| -------------
| Ding: eines, noch_eines.
| Mach_das: So, anders, oder_ganz_anders.
| -------------
Der zweite Punkt beendete meinen Satz :-).
Auf dem Niveau ist mir das eingängig.

Herzlichen Dank und
schönen Sonntag.

Loading...