Schrift
[thread]6446[/thread]

Brauche Hilfe bei RegEx



<< >> 7 Einträge, 1 Seite
format_c
 2004-08-01 21:11
#85176 #85176
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Entgegen dem was ich in dem Beitrag von pfuschi gesagt hab, berauche ich nun den RegEx Editor komme jedoch trotzdem auf keinen Grünen Zweig.

Ich haben einen String mit diesem Schema:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
schluesselwort schluesselwert {
option1 wert1;
option2 wert2;
muell;
}

schluesselwort andererschluesselwert {
option1 wert1;
option2 wert2;
anderermuell;
option3 "wert3";
}

schluesselwort nocheinandererschluesselwert {
option1 wert1;
option2 wert2;
muell;
}


Ich habe nun das Problem, dass ich schluesselwert, wert1, wert2 und wert3 haben möchte. Jedoch nur wo alle drei optionen vorhanden sind.

Und da scheitert meine RegEx. Meine sucht die ersten zwei Optionen und wandert dann weiter bis die option 3 aus dem anderen Wertebündel gefunden wurde und mischt mir die durcheinander.

mein RegEx sieht wie folgt aus:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
while (
$content =~ /
schluesselwort\s
(\w+?)
\s\{
\s*?
option1\s\d*?\s
(\w+?);
\s*?
option2\s\d*?\s
(\w+?);
.*?
option3\s
"(\w+?)";
\s*
\}
/xsg
) {
push @werte,[$1,$2,$3,$4];
}


Kann mir bitte jemand weiter helfen.

Gruß Alex
Ishka
 2004-08-02 01:14
#85177 #85177
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
.*? könnte dein Problem sein. Schreib vielleicht mal [^{}]*? dafür. Und versuch mal das ganze in ein Minimalproblem umzuformulieren - sonst kann man dir nur sehr schwer helfen.
sub z{if(@_){1while$x[$k=rand 10];t($t=$x[$k]=1)}print map"$z[$x[$_]]$_".($_%3?
"":"\n"),1..9}sub t{$j=0;$x[$_+1]==$t&&($j+=2**$_)for 0..8;z,die"Gewinner $z[$t]
"if grep$_==($j&$_),7,56,73,84,146,273,292,448;z,die"Gleichstand\n"if@x>9&&!grep
!$_,@x}@x=4;@z=qw{. [ (};z$^T&1;while(<>){next if$_>9||$x[$_];t$t=$x[$_]=2;z 1}
kabel
 2004-08-02 01:18
#85178 #85178
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
ich haett ne typ2 grammatik gebaut ;-)
stichwort CPAN:Parse::RecDescent
-- stefan
kabel
 2004-08-02 01:30
#85179 #85179
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
along the lines:
Code (perl): (dl )
1
2
3
4
5
my $g = q~
        file: entry(s?) {$item[1]}
        entry: 'schluesselwort' /\d+/ '{' option(s?)  '}' {[$item[2], $item[4]]}
        option: /[\w\d]+/ /[\w\d]+/ ';' {[$item[1], $item[2]]}
~;

muss natuerlich noch angepasst werden. v.a. muesstest du den /muell/ noch genauer spezifizieren.
-- stefan
format_c
 2004-08-02 11:46
#85180 #85180
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Danke schon mal. Werde mir mal Parse::RecDescent bei Gelegenheit anschauen.
Ishkas Vorschlag werde ich mal durch pfuschis RegExEditor jagen. Mal schauen was der kann ;)

Gruß Alex
format_c
 2004-08-20 00:12
#85181 #85181
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Irgendwie verstehe ich die Philosophie des Parsers nicht so ganz. Ist wahrscheinlich ähnlich ungewöhnlich wie HTML::Parser.

Also habe mal folgenden (plumpes) Skript geschrieben, komme aber nicht weiter.
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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
format_c@server:~/perl_scripts> cat test.pl && perl test.pl
#!/usr/bin/perl
use strict;
use Data::Dumper;
use Parse::RecDescent;
my @item;
local $/;
my $text = <DATA>;

my $g = q~
file: entry(s?) {$item[1]}
entry: 'schluesselwort' /\d+/ '{' option(s?) '}' {[$item[2], $item[4]]}
option: /[\w\d]+/ /[\w\d]+/ ';' {[$item[1], $item[2]]}
~;
my $parser = Parse::RecDescent->new($g);
$parser->entry($text);
print Dumper \@item;

schluesselwort schluesselwert {
option1 wert1;
option2 wert2;
muell;
}

schluesselwort andererschluesselwert {
option1 wert1;
option2 wert2;
anderermuell;
option3 "wert3";
}

schluesselwort nocheinandererschluesselwert {
option1 wert1;
option2 wert2;
muell;
}
$VAR1 = [];
format_c@server:~/perl_scripts>


Kannst du mir erklären wie sich die Grammatik mit den Regeln mit der Handhabung des Parsers und des Textes zusammensetzt? Würde mir glaub ich schon unheimlich helfen.

Gruß Alex
format_c
 2004-08-22 02:32
#85182 #85182
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Hat vielleicht sonst noch jemand mal mit Parse::RecDescent gearbeitet und versteht es?

Währ nett wenn mir jemand das vielleicht etwas genauer erklären könnte.

Gruß Alex
<< >> 7 Einträge, 1 Seite



View all threads created 2004-08-01 21:11.