Thread Hilfe zu Regex (8 answers)
Opened by rooney10 at 2011-03-22 16:43

Linuxer
 2011-03-23 00:28
#146810 #146810
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
2011-03-22T22:59:17 rooney10
Und abschließend noch die Frage allgemein, was bedeutet das /gc am Ende des Regex? das /g bedeutet, dass er den ganzen String durchsuchen soll und die Position mitspeichern soll. Durch das /c wird die Position behalten, auch wenn kein match kommt?!? Stimmt das so?


/g sorgt dafür, dass alle möglichen Treffer geliefert werden; normalerweise würde mit dem ersten Treffer die Arbeit getan sein.
So wird der erste Treffer ausgelesen und verarbeitet; weil es eine while-Schleife ist, wird nochmal geprüft, ob ab der letzten Trefferposition noch ein weiterer Treffer möglich ist. Wenn ja, wird dieser auch geliefert und kann verarbeitet werden. Dann wird nochmal geprüft, ... usw. bis kein Treffer mehr gefunden wird.

/c veranlasst, dass eben die letzte Treffer-Position behalten wird. Normalerweise wird die Trefferposition vergessen, sobald kein Treffer gefunden wurde.

Führ das mal aus; einmal mit /gc und einmal nur mit /g.
Achte auf den Output...

Code (perl): (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
#! /usr/bin/perl
use strict;
use warnings;

my $text = do { local $/; <DATA> };
my @matches;

print $text;
while ( $text =~ m<\\includegraphics(?:\[.*?\])?\{(.+?)\}>gc ) {
    push @matches, $1;
    print "Treffer bei Position ", pos($text), "\n";
}

print "Stehe nun bei Position ", pos($text), "\n";    # ohne /c ist hier pos($text) nicht definiert...

{
    local $\ = local $, = $/;
    print @matches;
}

__DATA__
Schau mal dies: \includegraphics{bild1.jpg}
Oder dieses: \includegraphics[2,"second"]{bild2.jpg}
Aber nicht das hier: \includegraphicsNew{no_pic.jpg}
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!

View full thread Hilfe zu Regex