正则表达式笔记2
定界符:
m
- i:忽略大小写
- s:匹配任意字符。即,可以处理.和换行符。或者说是[\d\D]。
- x:加入空白。注释#也是一种空白
绑定操作符:=~
因为默认匹配的是$_,那么如果要匹配左面的字符就要使用=~
例子:
my $some_other = "I dream of betty rubble.";
if ($some_other =~ /\brub/) {
print "Aye, there's the rub.\n";
}
匹配变量
把()中匹配的字符串放到变量$1,$2,$3…中去。
例子:
$_ = "Hello there, neighbor";
if (/(\S+) (\S+), (\S+)/) {
print "words were $1 $2 $3\n";
}
不捕获变量
在()的左括号的后面添加上“?:”
例子:
if (/(?:bronto)?saurus (steak|burger)/) {
print "Fred wants a $1\n";
}
捕获变量标签
可以配捕获变量添加一个标签,放到哈希%+中去。
例子:
my $names = 'Fred or Barney';
if( $names =~ m/((?<name2>\w+) (and|or) (?<name1>\w+))/ ) {
say "I saw $+{name1} and $+{name2}";
}
同样向后引用也可以使用这样标签 (\1;\g{1}):
例子:
my $names = 'Fred Flinstone and Wilma Flinstone';
if( $names =~ m/(?<last_name>\w+) and \w+ \g{last_name}/ ) {
say "I saw $+{last_name}";
}
这里的\g{last_name}还可以写成\k
自动匹配变量(奇怪变量名):
-
$& : 表示捕获的字符串。
例子:if ("Hello there, neighbor" =~ /\s(\w+),/) { print "That actually matched '$&'.\n"; }
上面的例子中,$&为“ there,” 而$1为“there”
- $` :表示匹配之前的字符串。
-
$’ : 表示配置之后的字符串。
例子:if ("Hello there, neighbor" =~ /\s(\w+),/) { print "That was ($`)($&)($').\n"; }
优先级
- Regular expression feature——–>Example
- Parentheses (grouping or memory) ——–>(…), (?:…), (?
- Quantifiers——–> a* a+ a? a{n,m}
- Anchors and sequence——–> abc ^a a$
- Alternation——–> a|b|c
- Atoms——–> a [abc] \d \1
测试程序:用来测试正则表达式测试的结果。匹配的字符放到<>中。
#!/usr/bin/perl
while (<>) {
chomp;
if (/YOUR_PATTERN_GOES_HERE/) {
print "Matched: |$`<$&>$'|\n";
}
else {
print "No match: |$_|\n";
}
}
以上内容记录自《perl learning v5》:)