perl - 使用regex
postfix in perl
//i : case insensitive
#!/usr/bin/perl
use warnings;
$_ = 'This is a wilma line';
if (/WiLMa/i) {
print "match\n";
}
Matches.
if (/WiLMa/) {, it doesn't match.
//m : multiline match
#!/usr/bin/perl
use warnings;
$_ = 'This is a wilma line
barney is on another line
but this ends in fred
and a final dino line';
if (/fred$/m) {
print "match\n";
}
This matches.
if (/fred$/) { (without m), it doesn't match.
if (/fred\z/m) {, it doesn't match.
if (/fred\z/) {, it doesn't match.
The function of $ without m is identical to \z, the ending anchor.
Similar the caret symbol ^, which is defined in regex.
//x : adding white space
#!/usr/bin/perl
use warnings;
$_ = 'This is a wilma line';
if (/wilma \s line/x) {
print "match\n";
}
Matches.
if (/wilma \s line/) {, it doesn't match.
Anchors
\A
\A anchor matches the absolute beginning of a string.
\z
\z anchor matches the end of a string without a new line.
while (<STDIN>) {
print if /\.png\Z/;
}
\Z
\Z anchor matches the end of a string with an optinal new line.
while (<STDIN>) {
chomp;
print "$_\n" if /\.png\z/;
}
This matches *.png from interactive command prompt,
while it dodoesn't matches if there is no chomp
\b
The word-boundary anchor \b matches at either end of a word.
#!/usr/bin/perl
use warnings;
$_ = 'neofred';
if (/fred\b/) {
print "match\n";
}
It matches,
but with, /\bfred\b/, it doesn't match.
\w
\w anchor matches ordinary letters, digits, and underscores.
It identical to [0-9a-zA-Z_]
\d
\d anchor matches digital numbers of 0-9.
Perl match variables
(?:)
Non-capturing parentheses, just grouping.
()
Capturing parentheses.
(?<name>)
Naming capture.
To assginment, use $+{name}.
Automatic match section
$&
Entire matched section.
$ (Invalid in CNBLOGS)
Before mathced.
$'
After matched.
浙公网安备 33010602011771号