Schrift
[thread]12030[/thread]

String rausfiltern

Leser: 1


<< |< 1 2 >| >> 14 Einträge, 2 Seiten
theresa
 2008-06-16 23:33
#111104 #111104
User since
2007-07-17
90 Artikel
BenutzerIn
[default_avatar]
Hallo,
bin auf eine weitere Schwierigkeit gestoßen, brauche einen regulären Ausdruck um einen String der
mit "s1" anfangen und mit "/" endet aus einem anderen String rauszufiltern.
Hilft mir da jemand weiter? Vielen Dank.

Edit - der Thread sollte eigentlich in "allgemein"
Linuxer
 2008-06-16 23:43
#111106 #111106
User since
2006-01-27
3881 Artikel
HausmeisterIn

user image
Hi,

was darf denn zwischen "s1" und "/" stehen?
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
pq
 2008-06-16 23:46
#111107 #111107
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
theresa+2008-06-16 21:33:21--
Edit - der Thread sollte eigentlich in "allgemein"

verschoben
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
theresa
 2008-06-17 00:56
#111113 #111113
User since
2007-07-17
90 Artikel
BenutzerIn
[default_avatar]
pq+2008-06-16 21:46:45--
theresa+2008-06-16 21:33:21--
Edit - der Thread sollte eigentlich in "allgemein"

verschoben

Danke :)

Quote
Hi,

was darf denn zwischen "s1" und "/" stehen?


Zahlen. Kann man nicht "alles" erlauben? also alles was ab dem ersten "s1" steht bis zum nächsten "/"?
Gast Gast
 2008-06-17 01:06
#111115 #111115
Code (perl): (dl )
print "$1\n" if( $string=~!s1(.+?)/!)
Linuxer
 2008-06-17 01:12
#111116 #111116
User since
2006-01-27
3881 Artikel
HausmeisterIn

user image
theresa+2008-06-16 22:56:00--
Quote
Hi,

was darf denn zwischen "s1" und "/" stehen?


Zahlen. Kann man nicht "alles" erlauben? also alles was ab dem ersten "s1" steht bis zum nächsten "/"?


Entweder so wie Gast es bereits vorschlug (ohne einfangende Klammern):
Code (perl): (dl )
$string=~ m{s1.+?/}


oder so
Code (perl): (dl )
$string =~ m{s1[^/]+/}


oder auf Zahlen eingeschränkt
Code (perl): (dl )
$string =~ m{s1\d+/}


Wenn sichergestellt ist, das nur Zahlen dazwischen auftauchen dürfen, würde ich die letzte Variante benutzen.
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
Gast Gast
 2008-06-17 01:56
#111120 #111120
theresa sagte "rauszufiltern". Ich denke die runden Klammern werden gebraucht.
Linuxer
 2008-06-17 02:12
#111124 #111124
User since
2006-01-27
3881 Artikel
HausmeisterIn

user image
Ich traue theresa soviel geistige Transferleistung zu, dass sie die Klammern selber an die richtige Stelle setzen kann.

Und je nach Verständnis des "Rausfilterns" will sie vielleicht den Rest des Strings behalten und nur "s1.*?/" entfernt wissen. Dann ist die Klammerung falsch ;) [1]

Letzten Endes sollte theresa aber selbst am besten wissen, was sie meint und braucht.

Ich verstand ihre Frage so, dass sie den Regex suchte um den Teilstring von "s1" bis "/" zu erkennen und nicht mit der Klammerung das Problem hat.


[1] hierfür wäre folgendes eine Lösung:
Code (perl): (dl )
$string =~ s/(.*)s1[^/]+/(.*)/$1$2/; # evtl. mit Modifier /g

meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
theresa
 2008-06-17 11:39
#111132 #111132
User since
2007-07-17
90 Artikel
BenutzerIn
[default_avatar]
Hallo liebe Leute,
irgendwie funktioniert alles nicht. Der erste Vorschlag von Gast hat irgendwo einen Systaxfehler, die m{...} Ausdrücke liefern nach wie vor denselben String und bei der Zeile von Linuxer kommt auch einen Fehler wegen einem unmatched Regex [
Ich kann leider nichts damit anfangen, da ich mich nicht auskenne.

Mit rausfiltern meinte ich, der String zwischen s1 und / soll zurückgegeben werden.

Da wir schon beim Thema sind, kann mir vielleicht jemand mit einem anderen Ausdruck weiterhelfen. Teil entfehrnen, der vor dem ersten "/" steht. Also alles was danach kommt zurückgeben.


das erste wäre von /pfad/bla/s132424328x/umleitung/datei

s132424328x zurückgeben

das zweite von pfad/bla/etwas

bla/etwas zurückgeben.
renee
 2008-06-17 11:52
#111134 #111134
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/perl

use strict;
use warnings;

my $string1 = '/pfad/bla/s132424328x/umleitung/datei';
my ($s) = $string1 =~ m!(s1[^/]+)!;
print "1: $s\n";

my $string2 = 'pfad/bla/etwas';
my ($pfad) = $string2 =~ m!^.*?/(.*)!;
print "2: $pfad\n";

__END__
C:\Perl>theresa.pl
1: s132424328x
2: bla/etwas
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< |< 1 2 >| >> 14 Einträge, 2 Seiten



View all threads created 2008-06-16 23:33.