Thread Matching mit Klammern geht nicht (8 answers)
Opened by Leonie at 2017-12-11 19:53

Linuxer
 2017-12-11 23:18
#187713 #187713
User since
2006-01-27
3875 Artikel
HausmeisterIn

user image
Hallo,

die runden Klammern haben eine Sonderfuktion im regulären Ausdruck (Regex), die hier bei Deinem Beispiel greift. Damit wird das eingefangen, was innerhalb der Klammern steht.

Wenn Du /$s/ verwendest, wird das, was in $s steckt als Regex gewertet und die Klammern bekommen eine Sonderbedeutung.

Beispiele:

Wenn Du nur prüfen willst, ob zwei Variablen identische Strings enthalten, verwende eq:

Code: (dl )
1
2
3
4
5
6
7
8
$s="a (b) c";
$_=$s;

if ( $_ eq $s) {
print "Found it!\n";
} else {
print "Not found\n";
}



Wenn Du per Regex prüfen willst, aber keine Interpretation der Sonderzeichen wünschst:

Code: (dl )
1
2
3
4
5
6
7
8
9
$s="a (b) c";
$_=$s;

# alles zwischen \Q und \E wird als String gewertet, allerdings werden Variablen interpoliert
if ( /\Q$s\E/ ) {
print "Found it!\n";
} else {
print "Not found\n";
}



Wenn Du die einfangende Klammer nutzen willst, musst Du bedenken, dass sie im Regex zusätzlich zum "normalen" Text angegeben werden muss:

Code: (dl )
1
2
3
4
5
6
7
8
9
$s="a (b) c";
$_="a b c";

if ( /$s/ ) {
# Das eingefangene der Klammer steht nun in $1
print "Found it: $1!\n";
} else {
print "Not found\n";
}



Mehr dazu findest Du in der dazugehörigen Dokumentation:

Perldoc:perlretut
Perldoc:perlre
Perldoc:perlrequick
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 Matching mit Klammern geht nicht