Perl语言入门(第五版) 读书笔记(四)---正则表达式

第七章~第九章  正则表达式
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 ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值