julley 发表于 2018-8-30 10:28:55

Perl入门(四)Perl的正则表达式

  正则表达式是Perl语言的特色,基本的语法不是很难,但是编写一个符合需求、高效的正则表达式,还是有一些挑战的。
  Perl的三种匹配模式
  1.查找
  语法:m/正则表达式内容/;
  作用:查找匹配内容中是否包含"正则表达式内容",如果包含返回1,否则返回0;
   view plain copy
  #!user/bin/env perl -w
  #1...
  $str1 = "i like perl";
  $result1 = ($str1 =~ m/perl/);
  print "$result1 $str1\n";
  2.替换
  语法:s/正则表达式内容/替换内容/;
  作用:查找匹配内容中是否包含"正则表达式内容",如果包含,使用"替换内容"替换,返回1,否则,返回0;
  补充:正常情况下,如果匹配内容包含多个可匹配项,此语法只会匹配第一个,然后替换返回。
  1.【真正表达式内容】可以使用()进行包含,这样做,可以在【替换内容】中使用$1,$2...进行引用,1、2为括号的顺序
  2.Perl提供模式修饰词。修饰词同样适用于查找模式。
  在替换语法后面添加g。表示替换所有匹配项
  在替换语法后面添加e。表示替换内容需要先进行计算后再进行替换操作
  在替换语法后面添加i。表示忽略大小写
  在替换语法后面添加s或m。表示允许存在换行符(\n)
   view plain copy
  #2... 使用love替换like
  $str2 = "i like perl like i";
  $result2 = ($str2 =~ s/like/love/);
  print "$result2 $str2\n";
  #2...1 使用g替换所有like
  $str2_1 = "i like perl like i";
  $result2_1 = ($str2_1 =~ s/like/love/g);
  print "$result2_1 $str2_1\n";
  #2...2 使用e告诉perl替换内容要先计算在替换
  $str2_2 = "you should pay \$22 for this mechine!";
  $result2_2 = ($str2_2 =~ s/(22)/$1*2/e);
  print "$result2_2 $str2_2\n";
  3.转换
  语法:tr/匹配内容集合/替换内容集合/;
  作用:首先,匹配内容集合中元素会和替换集合中元素一一对应起来,然后执行匹配操作,匹配上的内容使用对应的退换集合中内容进行替换,返回转换元素个数.
  补充:
  转换模式不能使用正则表达式和变量替换。
  如果【匹配内容集合】元素个数比【替换内容集合】元素多,多出的元素都会对应到【替换内容集合】的最后一个元素。
  如果【匹配内容集合】元素个数比【替换内容集合】元素少,忽略【替换内容集合】中多余的元素
   view plain copy
  #3... 将小写转换成大写
  $str3 = "abcdefghijklmnopqrstuvwxyz";
  $result3 = ($str3 =~ tr/a-z/A-Z/);
  print "$result3 $str3\n";
  #3...1 匹配内容集合元素多于替换内容集合元素
  $str3_1 = "abcdefghijklmnopqrstuvwxyz";
  $result3_1 = ($str3_1 =~ tr/a-z/A-Y/);
  print "$result3_1 $str3_1\n";
  #3...2 匹配内容集合元素少于替换内容集合元素
  $str3_2 = "abcdefghijklmnopqrstuvwxyz";
  $result3_2 = ($str3_2 =~ tr/a-y/A-Z/);
  print "$result3_2 $str3_2\n";
  运算结果为
   view plain copy
  1 i like perl
  1 i love perl like i
  2 i love perl love i
  1 you should pay $44 for this mechine!
  26 ABCDEFGHIJKLMNOPQRSTUVWXYZ
  26 ABCDEFGHIJKLMNOPQRSTUVWXYY
  25 ABCDEFGHIJKLMNOPQRSTUVWXYz
  Perl的绑定操作符
  上面的例子中已经使用了"=~"绑定操作符,绑定操作符的作用就是将【需要匹配的内容】和【匹配模式】绑定,然后进行计算。
  绑定操作符有:
  =~ : 英文【does】 表示满足匹配模式
  !~ : 英文【doesnt】表示不满足匹配模式
  正则表达式的元字符
  元字符是正则表达式组成的基本元素。(下面这个表是从资料里面copy来的.手打累死的说)
  字符描述
  \   将下一个字符标记为一个特殊字符、或一个原义字符、或一个 后向引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\' 匹配 "\" 而 "(" 则匹配 "("。
  ^   匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。
  $   匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。

[*]匹配前面的子表达式零次或多次。例如,zo 能匹配 "z" 以及 "zoo"。 等价于{0,}。
[*]匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。  ?   匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。
  {n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
  {n,}    n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o'。
  {n,m}   m 和 n 均为非负整数,其中n
页: [1]
查看完整版本: Perl入门(四)Perl的正则表达式