Schrift
[thread]11912[/thread]

RegEx: was macht _|_ ?

Tags: Ähnliche Threads

Leser: 1


<< >> 10 Einträge, 1 Seite
pktm
 2008-05-25 14:11
#110267 #110267
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hallo!

Hier folgende, einigen vllt. bekannte RegEx:
Code: (dl )
	mail => qr/\.ru$_|_\@gawab\./,


Da blicke ich nicht ganz durch. Intuitiv werden da eMailadressen mit .ru am Ende oder @gawab. drin gematcht.
Nur wie ist das _|_ zu lesen? Ich habs in perlre & perlreref nicht gefunden.
Sorgt das für größten Skopus? Oder ist $_ irgend etwas spezielles?

Kurz: wie liest man die RegEx da?

Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
moritz
 2008-05-25 14:48
#110271 #110271
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
$_ ist eine Variable, die in die Regex interpolliert wird.
Der Unterstrich nach dem | matcht einfach einen Unterstrich.
pktm
 2008-05-25 15:00
#110273 #110273
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Ah ok. Aber stimmt denn dann der Skopus überhaupt noch? Hat man nicht immer den kleinsten Skopus? So dass im falle der o.g. RegEx dann $_ oder der Unterstrich in Disjunktion zueinander stehen würden?
http://www.intergastro-service.de (mein erstes CMS :) )
moritz
 2008-05-25 15:21
#110274 #110274
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Also erst mal geht es hier um precedence (Vorrang), nicht um Scope (Gültigkeitsbereich; "Skopus" kenne ich nicht).

Ob der Vorrang "stimmt" hängt davon ab, was du letztendlich erreichen willst.
Obiges Beispiel ist gleichbedeutend mit

Code (perl): (dl )
qr/(?: \. ru $_ ) | (?: _ \@ gawab \. )/x
pktm
 2008-05-25 15:28
#110275 #110275
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Ich dachte immer, so ein Operator frisst so wenig von der RegEx wie möglich.
Soll also bedeuten, dass der | - Operator weniger Vorrang hat, als die aneinanderreihung von beliebigen anderen Elementen in einer RegEx? Daraus ergäbe sich dann der kleinste Skopus, also der Bereich, über den sich die Auswirkungen des Operators, die Disjunktion, erstreckt.

Aber so ist es gut, denn das erspart mir so einige Klammerungen :)
http://www.intergastro-service.de (mein erstes CMS :) )
renee
 2008-05-25 15:35
#110277 #110277
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
pktm+2008-05-25 12:11:58--
Hallo!

Hier folgende, einigen vllt. bekannte RegEx:
Code: (dl )
	mail => qr/\.ru$_|_\@gawab\./,


[...]


Wo hast Du das denn her?
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
pktm
 2008-05-25 15:47
#110278 #110278
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Das hast du mir mal verlinkt.
Hier: http://board.perl-community.de/thread/11645/#MSG15
http://www.intergastro-service.de (mein erstes CMS :) )
renee
 2008-05-25 15:51
#110279 #110279
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das sieht mir sehr nach der spam.conf aus, wobei es dort so heißt:

Code: (dl )
mail = \.ru$_|_\@gawab\.
und da ist das _|_ ein Trenner...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
moritz
 2008-05-25 16:38
#110284 #110284
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
pktm+2008-05-25 13:28:26--
Ich dachte immer, so ein Operator frisst so wenig von der RegEx wie möglich.


Operatoren fressen nichts.

Die Regex-Engine parst die regex, und beachtet dabei folgenden Operatorvorrang:

Code: (dl )
1
2
3
4
5
stärkster Vorrang oben
Klammern (), [], (?>), usw
Quantoren *, +, ?, *?, *+, {...}
Konkatenation abc
Alternierung |


Dabei zählen Anker wie ^ und $ zur Konkatenation.

Also wird
Code: (dl )
qr{^abc+|d(?:foo)+$}

wie folgt geparst:
Code: (dl )
((^ab)(c+))|(d((?:foo)+)$)
pktm
 2008-05-25 19:12
#110286 #110286
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
renee+2008-05-25 13:51:18--
Das sieht mir sehr nach der spam.conf aus, wobei es dort so heißt:

Code: (dl )
mail = \.ru$_|_\@gawab\.
und da ist das _|_ ein Trenner...


Aha! Das erklärts...

Dafür hab ich jetzt was über die Rangfolge von Operatoren gelernt :)
http://www.intergastro-service.de (mein erstes CMS :) )
<< >> 10 Einträge, 1 Seite



View all threads created 2008-05-25 14:11.