Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]8799[/thread]

index() & reguläre Ausdrücke

Leser: 1


<< |< 1 2 >| >> 16 Einträge, 2 Seiten
Kalmuecke
 2007-02-28 16:28
#74690 #74690
User since
2006-10-14
68 Artikel
BenutzerIn
[default_avatar]
Hi,

ich suche eine Funktion wie bspw. index(), die mir die Position eines Zeichens zurückgibt, allerdings suche ich die Zeichenkette mit /( \d+: )/g, also einem regulären Ausdruck!

Muss eben in einem String die erste Position des mit /( \d+: )/g Zeichen finden.
Ich hoffe ich konnte mich verständlich ausdrücken??? ;)
Kann mir da jemand weiterhelfen?

Danke im voraus....
topeg
 2007-02-28 17:02
#74691 #74691
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
So kann man es machen:
Code (perl): (dl )
 my $pos=length((split(/\d+:/,$string,2))[0]);
betterworld
 2007-02-28 17:57
#74692 #74692
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Code: (dl )
"hallo welt" =~ /[wxyz]/ and print $-[0];


Ausgabe ist 6, weil "w" an sechster Stelle steht (wenn man mit 0 anfaengt zu zaehlen).\n\n

<!--EDIT|betterworld|1172678532-->
Kalmuecke
 2007-03-01 12:31
#74693 #74693
User since
2006-10-14
68 Artikel
BenutzerIn
[default_avatar]
Das funktioniert aber leider irgendwie nicht!?!?!??!!!

Ich brauche eine Funktion wie index, die aber mit Regulären Ausdrücken arbeiten kann!
Ronnie
 2007-03-01 12:35
#74694 #74694
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Zeig mal Code und Beispieldaten!
sesth
 2007-03-01 12:54
#74695 #74695
User since
2005-02-01
181 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
In scalar context, each execution of m//g finds the next match, returning true if it matches, and false if there is no further match. The position after the last match can be read or set using the pos() function; see pos in the perlfunc manpage. A failed match normally resets the search position to the beginning of the string, but you can avoid that by adding the /c modifier (e.g. m//gc). Modifying the target string also resets the search position.

Siehe perlop
Gruß
Thomas
Kalmuecke
 2007-03-01 13:06
#74696 #74696
User since
2006-10-14
68 Artikel
BenutzerIn
[default_avatar]
[quote=Ronnie,01.03.2007, 11:35]Zeig mal Code und Beispieldaten![/quote]
Code: (dl )
D:\meinPfad\datei.c 881: meine Nachricht mit Datei2.h 991: blabla


Ich möchte nun den String haben bis zu 881:, sprich zum ersten Zahl gefolgt von einem Doppelpunkt!
renee
 2007-03-01 13:26
#74697 #74697
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
my $string = 'D:\meinPfad\datei.c 881: meine Nachricht mit Datei2.h 991: blabla';
my ($match) = $string =~ /^(.*?\d+:)/;
print $match;


ungetestet...
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/
Ronnie
 2007-03-01 13:39
#74698 #74698
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
wenn es nicht einschließlich der Zahl und des Doppelpunktes sein soll:
Code: (dl )
my ($match) = $string =~ /^(.*?)\s?\d+:/;
betterworld
 2007-03-01 13:54
#74699 #74699
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
[quote=Kalmuecke,01.03.2007, 11:31]Das funktioniert aber leider irgendwie nicht!?!?!??!!!

Ich brauche eine Funktion wie index, die aber mit Regulären Ausdrücken arbeiten kann![/quote]
Dann wollen wir Dir eine Funktion wie index zusammenschustern, wobei ausschließlich die Information verwendet wird, die in meinem letzten Beitrag hier stand:
Code: (dl )
1
2
3
4
5
6
7
8
sub index_regex {
    my ($string, $regex) = @_;
    $string =~ $regex or return -1;
    return $-[0];
}

my $index = index_regex("hallo Welt", qr/[A-Z]/);
print "Whoah, ein Grossbuchstabe bei $index\n" if $index != -1;

Die Funktion jetzt mit Deinem regulaeren Ausdruck zu verwenden, sollte eine leichte Uebung sein.

An die anderen Poster: Irgendwie kommt mir meine Loesung am effizientesten vor ;).  Ich muss doch nicht noch den Teil vor dem Suchmuster matchen, nur um seine Laenge zu ermitteln, wenn ich auch so an die Positition des Maches rankomme.\n\n

<!--EDIT|betterworld|1172750566-->
<< |< 1 2 >| >> 16 Einträge, 2 Seiten



View all threads created 2007-02-28 16:28.