Schrift
[thread]357[/thread]

wie kann ich "Bauern" und "Bayern" finden?



<< >> 9 Einträge, 1 Seite
oruebe
 2004-08-12 19:39
#3439 #3439
User since
2004-07-09
46 Artikel
BenutzerIn
[default_avatar]
Hallo,

wie kann ich in einem ganzen Text eine Zeichenkette in eine Variable einlesen, die nach "xyz" beginnen soll und vor "xzy" aufhören soll?

Es wird in dem gesammten Text nur ein "xyz" und aber ganz viele "xzy" geben. Es muss also das nächste "xzy" quasi als "Stop" genommen werden.

Wie mache ich das?

Danke und Gruß,
Oliver\n\n

<!--EDIT|oruebe|1092325623-->
pq
 2004-08-12 20:05
#3440 #3440
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
also ich weiß zwar nicht, was die bauern und bayern damit zu tun haben, aber
bitte:
Code: (dl )
1
2
# ungetestet
my ($gesucht) = $text =~ m/xyz(.*)xzy/s;

siehe perldoc perlre für weitere details zu regexes
(bzw. perlretut, perlrequick)
ansonsten kannst du evtl. noch etwas effizienter mit den funktionen
index und substr arbeiten (dokumentiert in perlfunc)
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
oruebe
 2004-08-12 20:25
#3441 #3441
User since
2004-07-09
46 Artikel
BenutzerIn
[default_avatar]
super. Danke.

Aber: Würde $gesucht jetzt nicht xyz und xzy beinhalten? Ich möchte NUR die Zeichen haben, die dazwischen stehen. Aber das könnte ich ja dann mit
$gesucht =~ s/xyz//;
machen.

Ich habe es so versucht aber $gesucht beinhaltet auch alle Zeichen, die nach xzy stehen. Das soll nicht sein.

Hast Du da noch einen Tipp?
[E|B]
 2004-08-12 20:46
#3442 #3442
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
@pq

Denk an das "?". Sonst ist seine Bedingung unerfüllt:

Code: (dl )
my ($gesucht) = $text =~ m/xyz(.*?)xzy/s;
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
Gast Gast
 2004-08-12 21:32
#3443 #3443
Code: (dl )
my ($gesucht) = $text =~ m/xyz(?:(?![xyz|xzy]).)*xzy/s;


Wäre wohl sicherer.
Gast Gast
 2004-08-12 21:46
#3444 #3444
Na fast (hoffentlich, da ungetestet), die umschließenden Klammern fehlen noch:

Code: (dl )
my ($gesucht) = $text =~ m/xyz((?:(?![xyz|xzy]).)*)xzy/s;
DS
 2004-08-12 22:00
#3445 #3445
User since
2003-08-04
247 Artikel
BenutzerIn
[default_avatar]
Das Fragezeichen sorgt dafür, daß beim ersten Auftreten von "xzy" weitergegangen wird... "xyz" kommt eh nur einmal vor, und selbst wenn es zwischen Anfangs- und Endstring irgendwo vorkommensollte, wäre das wohl ok... also schätze ich mal das pq's RegExp in Ordnung geht...

Falls ich was überlesen habe: Sorry! :D

Edit: Ich meinte den von [E|B] verbesserten RegExp von pq...\n\n

<!--EDIT|DS|1092333819-->
Strat
 2004-08-12 23:53
#3446 #3446
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
warum so kompliziert? E|B's loesung macht dasselbe um einiges besser lesbar
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
pq
 2004-08-13 11:13
#3447 #3447
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=oruebe,12.08.2004, 18:25]Aber: Würde $gesucht jetzt nicht xyz und xzy beinhalten?[/quote]
nein, nur das, was in den klammern steht.
Quote
Ich habe es so versucht aber $gesucht beinhaltet auch alle Zeichen, die nach xzy stehen. Das soll nicht sein.

jo, hab natürlich das fragezeichen nach dem .* vergessen =)
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
<< >> 9 Einträge, 1 Seite



View all threads created 2004-08-12 19:39.