Schrift
[thread]6396[/thread]

regulärer ausdruck

Leser: 1


<< |< 1 2 >| >> 19 Einträge, 2 Seiten
Gast Gast
 2004-07-13 17:39
#84208 #84208
hallo zusammen,

die mechanik für reguläre ausdrücke ist bei perl/mysql ganz ähnlich. ich suche einen reg. ausdruck für mysql der auf eine unterschiedliche anzahl von punkten (".") passt.

z.b.:
cd.interpret.album.song
cd.interpret.album
cd.interpret

-> suche alle einträge, die einen punkt enthalten: "cd.interpret"
-> suche alle einträge, die zwei punkte enthalten: "cd.interpret.album"
...

gruß,
norman
Crian
 2004-07-13 18:04
#84209 #84209
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
m~^(\w+\.)+\w+$~

Edit: wenn Du nur die mit 4 Punkten haben willst:

m~^(\w+\.){4}\w+$~

geht auch für andere Zahlen ;-)


Edit2: Fehlendes + am Ende der RE's ergänzt.\n\n

<!--EDIT|Crian|1089729698-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
pq
 2004-07-13 18:13
#84210 #84210
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
so vielleicht? (achtung ungetestet)
@a1 = grep { tr/.// == 1} @array;
@a2 = grep { tr/.// == 2} @array;
# etc.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
norman
 2004-07-13 18:26
#84211 #84211
User since
2004-03-11
46 Artikel
BenutzerIn
[default_avatar]
bin ich zu blöd??? das funktioniert nicht:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
my @array = ("cd.interpret.album.song","cd.interpret.album","cd.interpret","cd");


for my $i (0..$#array) {

# alle einträge mit 2 punkten, sollte "cd.interpret.album" ergeben
if($array[$i] =~ m~^(\w+\.){2}\w$~) {
print $array[$i] ."\n";
}

}
\n\n

<!--EDIT|norman|1089728828-->
Crian
 2004-07-13 18:36
#84212 #84212
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Geht mit einem weiteren Plus:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
use strict;
use warnings;

my @array = ("cd.interpret.album.song","cd.interpret.album","cd.interpret","cd");


for my $i (0..$#array) {
   # alle einträge mit 2 punkten, sollte "cd.interpret.album" ergeben
   if ($array[$i] =~ m~^(\w+\.){2}\w+$~) {
       print $array[$i] ."\n";
   }
}


Ausgabe

Code: (dl )
cd.interpret.album


das hab ich eben einfach vergessen, ich editiere es oben noch mit rein...


Edit: Falls Du auch Umlaute / SZ in deinen Strings hast musst Du noch use locale; verwenden oder [A-ZÄÖÜa-zäöüß] statt \w nehmen.\n\n

<!--EDIT|Crian|1089729588-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
norman
 2004-07-13 18:53
#84213 #84213
User since
2004-03-11
46 Artikel
BenutzerIn
[default_avatar]
super, danke! perl machts. mysql gibt allerdings auch alle <=n werte aus, dh. die begrenzung {3} beinhaltet auch alle {1} und {2} - werte.

select content from config_content_ids
where content rlike '^([A-Za-z0-9_]+\.){3}[A-Za-z0-9_]+$' order by content;
Gast Gast
 2004-07-13 19:02
#84214 #84214
So gehts denn auch ...
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/perl

   use strict;
   use warnings;
   
   my @cont = (
       'cd.interpret.album.song',
       'cd.interpret.album',
       'cd.interpret'
   );
   
   my (@song, @album, @interpret);

       foreach (@cont) {
           my @temp = split /\./, $_;
           $#temp == 3 && (push @song, $_);
           $#temp == 2 && (push @album, $_);
           $#temp == 1 && (push @interpret, $_);
       }

   print "Song: $_\n" foreach @song;
   print "Album: $_\n" foreach @album;
   print "Interpret: $_\n" foreach @interpret;
Crian
 2004-07-13 19:08
#84215 #84215
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
[quote=norman,13.07.2004, 16:53]super, danke! perl machts. mysql gibt allerdings auch alle <=n werte aus, dh. die begrenzung {3} beinhaltet auch alle {1} und {2} - werte.

select content from config_content_ids
where content rlike '^([A-Za-z0-9_]+\.){3}[A-Za-z0-9_]+$' order by content;[/quote]
Vielleicht hilft dann {3,3} statt {3}?
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
norman
 2004-07-13 19:17
#84216 #84216
User since
2004-03-11
46 Artikel
BenutzerIn
[default_avatar]
leider nicht. immernoch das gleiche resultat.
pq
 2004-07-13 19:47
#84217 #84217
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
was hast du eigentlich gegen meine lösung?
tr/// dürfte hier im gegensatz zu m/^\w+.../ oder split /./
am schnellsten sein. um einen punkt zu matchen, braucht
man keine regex...
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
<< |< 1 2 >| >> 19 Einträge, 2 Seiten



View all threads created 2004-07-13 17:39.