第七章~第九章 正则表达式
1. 元字符
点(.)匹配除换行符的任意字符; 反斜线(\)用于转义
2. 量词
(*)零次或多次 (+)一次或者多次 (?)可有可无 a{2,4}匹配a字符2-4次
量词都为贪婪量词,即会尽可能多的匹配; 后面加上?则变为非贪婪量词
3. 模式分组
()用来分组 \1 \2 引用分组
$_ = "yabba dabba"; if(/y(....) d\1/) {}
4. 择一匹配 或(|)
/fred( +|\t+)barney/ 匹配单词中间有空格或制表符
5. 字符集
[abc] [a-zA-Z] [^\d]
6. 模式匹配 m//,m(),m[],m{}都行,用m//时可以简写为//
7. 可选修饰符
/i 大小写无关匹配
if(/yes/i){}
/s 匹配任意字符,此时点(.)号可以匹配换行符
$_ = "barney\n with\nfred"; if(/barney.*fred/s){}
/x 加入空白
/-?\d+\.?\d*/ #挤在一起
/-? \d+ \.? \d*/ #分开能看的清除些
/m 匹配多行
$text = "Fred dropped a 5 ton rock";
my @words = ($test =~ /([a-z]+)/ig);
print "@words\n"; #"Fred dropped a ton rock"
8. 锚位
^行首 $行尾
\d单词锚位 /\bname\b/ 匹配name,不匹配namespace
9. 匹配(=~) 不匹配(!~)
10. 模式串内插
$what = "name"; /^($what)/ <=> /^(name)/
11. 捕获变量
$_ = "Hello there, neighbor";
if(/(\S+) (\S+) (\S+)/) {print "words are $1 $2 $3 \n";}
关闭捕获变量(?:),但是仍然占位$N if(/(?:Hello) (\S+)/)
给捕获变量命名(?<LABEL>PATTERN),访问时用$+{LABEL} if(/?<name1>\S+/) {say "$+{name1}";}
12. 自动匹配变量
$` : 匹配起始位置之前略过的串
$& : 匹配模式整个串
$' : 匹配结束位置之后的串
if("Hello there, neighbor" =~ /\s(\w+),/) {
print "That was ($`)($&)($')\n"; } #输出结果为(Hello)( there,)( neighbor)
13. 优先级
圆括号 > 量词 > 锚位和序列 > 择一 > 元素
14. 替换与修饰符
s{__END__.*}{}s; # 删除掉__END__标记后的内容
$filename = s/^\s+|\s+$//g; # /g表示全局替换 /i /x /s和前述的意义相同
15. 大小写替换
\U 将其后的内容全部转换为大写 s/(fred|barney)/\U$1/gi; #FRED
\L 将其后内容全部转换为小写 s/(Fred|Barney)/\L$1/gi; #fred
\E 结束其后字符的大小写转换 s/(Fred)(Barney)/\U$1\E $2/gi; #FRED barney
\u 将其后第一个字符转换为大写 s/(fred|barney)/\u\L$1/gi; #Fred
\l 将其后第一个字符转换为小写 print "Hello, \L\u$name \n";
16. split操作符可以使用正则表达式
@fields = split /:/, "::a:b:c::"; #得到("", "", "a", "b", "c"), 会自动保留开头的空字段, 去掉结尾的空字段
17. join函数连接字符串
my $str = join "-", @array ;
Perl语言入门(第五版) 读书笔记(四)---正则表达式
最新推荐文章于 2023-03-10 16:59:28 发布