Schrift
[thread]7614[/thread]

Bestimmte Anzahl von Zeichen mit Regexp filtern

Leser: 1


<< |< 1 2 3 4 >| >> 39 Einträge, 4 Seiten
bloonix
 2006-01-12 14:05
#61797 #61797
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/perl -w
use strict;

my $string1 = "dies\nist\nein\ntest";

if (length($string1) > 8) {
$string1 =~ s/(.{8})(.*)/$1/;
print "zuviel: $2\n";
}

my $string2 = "dies ist ein test";

if (length($string2) > 8) {
$string2 =~ s/(.{8})(.*)/$1/;
print "zuviel: $2\n";
}


Hi, hat jemand eine Ahnung, weshalb $2 im ersten Beispiel leer
ist? Was mag regexp nicht an den Newlines?
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
sesth
 2006-01-12 14:09
#61798 #61798
User since
2005-02-01
181 Artikel
BenutzerIn
[default_avatar]
Bei mehrzeiligen Strings benötigt der Substitue ein m (Multiline):
Code: (dl )
$string1 =~ s/(.{8})(.*)/$1/m;
Gruß
Thomas
bloonix
 2006-01-12 14:21
#61799 #61799
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=sesth,12.01.2006, 13:09]Bei mehrzeiligen Strings benötigt der Substitue ein m (Multiline):
Code: (dl )
$string1 =~ s/(.{8})(.*)/$1/m;
[/quote]
Modifier war das Schlagwort :-)

Code: (dl )
$string1 =~ s/(.{8})(.*)/$1/s;


muss es sein.

Danke.
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
bloonix
 2006-01-12 14:26
#61800 #61800
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=sesth,12.01.2006, 13:09]Bei mehrzeiligen Strings benötigt der Substitue ein m (Multiline):
Code: (dl )
$string1 =~ s/(.{8})(.*)/$1/m;
[/quote]

die Perlbibel schreibt ...

/m - ^ und $ matchen unmittelbar neben eingebettetem \n

wie soll ich das verstehen?
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
sesth
 2006-01-12 14:35
#61801 #61801
User since
2005-02-01
181 Artikel
BenutzerIn
[default_avatar]
Z.b. matcht "^is", aber nicht "^st" in Deinem Beispiel. ^ und $ können im Gegensatz zu "\n" nicht ersetzt werden.
Gruß
Thomas
Strat
 2006-01-12 14:47
#61802 #61802
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
fuer sowas wuerde ich keine RE, sondern substr verwenden, z.B.
Code: (dl )
1
2
3
4
5
6
my $string1 = "dies\nist\nein\ntest";

if (length($string1) > 8) {
my $zuviel = substr($string1, 0, 8, '');
print "zuviel: $zuviel\nstring: $string1";
}

siehe perldoc -f substr
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
bloonix
 2006-01-12 14:58
#61803 #61803
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=Strat,12.01.2006, 13:47]fuer sowas wuerde ich keine RE, sondern substr verwenden, z.B.
Code: (dl )
1
2
3
4
5
6
my $string1 = "dies\nist\nein\ntest";

if (length($string1) > 8) {
 my $zuviel = substr($string1, 0, 8, '');
 print "zuviel: $zuviel\nstring: $string1";
}

siehe perldoc -f substr[/quote]
Ist \n 1-Zeichen?

Der Text wird in eine Datenbank eingetragen. Die Spalte ist
ein VARCHAR(2000). Was also noch hinzukommt ist, dass ich
die \n zählen und durch <br> ersetzen muss. <br> sind ja
4-Zeichen.

\n darf ich aber erst ersetzen, sobald der insert erfolgt, weil
<textarea>'s ein <br> darstellen würde und kein tatsächliches
Newline.

hmm... nicht so einfach wie ich anfangs dachte.\n\n

<!--EDIT|opi|1137070908-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
Strat
 2006-01-12 15:14
#61804 #61804
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=opi,12.01.2006, 13:58]Ist \n 1-Zeichen?[/quote]
haengt vom Blickwinkel ab. sowohl unter windows als auch unix/linux kommt fuer moderne perls (ich glaube, ab 5.6.0):
Code: (dl )
1
2
my $string = "\n";
print length $string, "\n";

=> 1

fuer die Datenbank koennen es eventuell unter windows zwei zeichen sein. aber das problem aendert sich nicht, ob du ^.{8} oder substr($str, 0,8,'') schreibst.

du kannst ja vorab \n durch irgendwas 4-wertiges ersetzen (z.B. \0\0\0\0), dann kannst du gleich mit den richtigen laengen arbeiten, und musst nur aufpassen, dass du nicht innerhalb von den \0 abschneidest... und fallst du den originaltext nochmal brauchst, dann einfach wieder zurueckwandeln von \0\0\0\0 nach \n\n\n

<!--EDIT|Strat|1137071696-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
pq
 2006-01-12 15:27
#61805 #61805
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=sesth,12.01.2006, 13:09]Bei mehrzeiligen Strings benötigt der Substitue ein m (Multiline):
Code: (dl )
$string1 =~ s/(.{8})(.*)/$1/m;
[/quote]
/m hat nix mit . zu tun. /m verändert ^ und $.
perldoc perlre
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
Strat
 2006-01-12 15:37
#61806 #61806
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
/s ware vielleicht interessanter, weil dann . auch auf newline matcht...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< |< 1 2 3 4 >| >> 39 Einträge, 4 Seiten



View all threads created 2006-01-12 14:05.