Schrift
[thread]5740[/thread]

Regular Expression: Ich suche mal wieder ein Regexp ....



<< |< 1 2 >| >> 18 Einträge, 2 Seiten
BrownWolf
 2003-09-20 20:34
#54445 #54445
User since
2003-08-15
308 Artikel
BenutzerIn
[default_avatar]
Hallo,

Ich habe eine Textdatei dort steht folgendes drin:

Code: (dl )
1
2
my $string = "BrownWolf";
my $text = "xxxx";


Nun kann in der Datei aber auch:

Code: (dl )
1
2
3
4
5
6
my $string = "
BrownWolf
User2
User3
User4
";


stehen. Nun möchte ich mit einem Regexp das zwischen den " " matchen aber da gibt es ein Problem.

Mache ich:

Code (perl): (dl )
1
2
3
if($line =~ /\"(.*?)\"/) {

}


Dann findet er es nur wenn es in einer Zeile steht.
Kann man auch über mehrere Zeilen matchen ?
Code (perl): ()
1
2
3
sub _{s;;xrqIpiql\\{}p{pl{R>rl{N{}gjwpkssq]>rl{N;;;*{{}=*{_};;
&#36{{}={q{{{}}}=>[reverse+split+reverse+q;}{;]};&#36{{}->{q{{{}}}}->[@{{}];}
&#36{{}=reverse+_(q{{}}=>q{{}})^chr(30)x+length&_(q{{}}=>,q{{}})and+print;
format_c
 2003-09-20 20:39
#54446 #54446
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Bist schon auf dem richtigen Web:
Code: (dl )
1
2
3
if ($line =~ /"(.*?)"/s) {

}


gruß Alex
kabel
 2003-09-20 20:42
#54447 #54447
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
CPAN:du suchst dieses modul
ich rieche es 8) ist sogar in der standarddistri!

hrmpf ;) der modifier s erweitert die zeichenklasse "." um das newline-zeichen.
-- stefan
BrownWolf
 2003-09-20 20:58
#54448 #54448
User since
2003-08-15
308 Artikel
BenutzerIn
[default_avatar]
Funktioniert leider nicht:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
open(DAT,"datei.txt");
my @read = <DAT>;
close(DAT);

for(@read) {
    if ($_ =~ /"(.*?)"/s) {
    print $1;
    }
}


Gibt mir wieder nur ein Ergebnis wenn die " in einer Zeile stehen.
Code (perl): ()
1
2
3
sub _{s;;xrqIpiql\\{}p{pl{R>rl{N{}gjwpkssq]>rl{N;;;*{{}=*{_};;
&#36{{}={q{{{}}}=>[reverse+split+reverse+q;}{;]};&#36{{}->{q{{{}}}}->[@{{}];}
&#36{{}=reverse+_(q{{}}=>q{{}})^chr(30)x+length&_(q{{}}=>,q{{}})and+print;
format_c
 2003-09-20 21:00
#54449 #54449
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Die Zeilenumbrüche müssen natürlich mit in den Skalar.
Bsp.:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
use strict;
use warnings;
local $/;
my $line = <DATA>;
print $1 if $line =~ /"(.*?)"/s;


asdfahds"dsfkjhds
sldfhads
#asdlfhasdf
"adsfaödsj
asdöf

dsfkjhds
sldfhads
#asdlfhasdf


Alles klar?

Gruß Alex

Edit. da wo immer ein Absatz ist sollte eigentlich eimal _ _ D A T A _ _ und das zweite mal _ _ E N D _ _ stehen. nur ohne die Leerzeichen. Das hat das Forum mir wohgl rausoptimiert :)\n\n

<!--EDIT|format_c|1064077451-->
BrownWolf
 2003-09-20 21:23
#54450 #54450
User since
2003-08-15
308 Artikel
BenutzerIn
[default_avatar]
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 -w

use strict;
use warnings;
open(DAT,"datei.txt") || die $!;
local $/;
my $line = <DAT>;
print $1 if $line =~ /"(.*?)"/s;
close(DAT);

datei.txt:

my $var = "BrownWolf";
my $ujd = "
a
b
c
d
";

Ausgabe:

BrownWolf


Warum bekomme ich nicht "a b c d" ausgegeben ?
Code (perl): ()
1
2
3
sub _{s;;xrqIpiql\\{}p{pl{R>rl{N{}gjwpkssq]>rl{N;;;*{{}=*{_};;
&#36{{}={q{{{}}}=>[reverse+split+reverse+q;}{;]};&#36{{}->{q{{{}}}}->[@{{}];}
&#36{{}=reverse+_(q{{}}=>q{{}})^chr(30)x+length&_(q{{}}=>,q{{}})and+print;
format_c
 2003-09-20 21:27
#54451 #54451
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
undefinier doch bitte $/ vor dem open.

Gruß Alex
format_c
 2003-09-20 21:32
#54452 #54452
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Achso. Sag doch dass mehrere Treffer vorkommen können.
Indem Fall:
Code: (dl )
1
2
3
4
5
local $/;
my $line = <DATA>;
my @matched = $line =~ /"(.*?)"/sg;
local $, = '|';
print @matched;


gruß Alex
kabel
 2003-09-20 21:48
#54453 #54453
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
Crian
 2003-09-21 22:59
#54454 #54454
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Interessanter Weise geht das mit s nicht so, wie ich es von m in Erinnerung hatte :-/
Damit hab ich mich gestern abgemüht (Ich wollte alle Treffer, die ich im String finde in ein Array extrahieren und dabei den String halt noch verändern.)
Dies ist mir nur in zwei Statements gelungen, aber nicht in einem. Hat dazu jemand vielleicht eine Idee?\n\n

<!--EDIT|Crian|1064170773-->
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
<< |< 1 2 >| >> 18 Einträge, 2 Seiten



View all threads created 2003-09-20 20:34.