Perl正则表达式

1、简单模式:若模式匹配的对象是$_的内容,只要把模式写在一对斜线//中就可以了,其实也是m//的缩写,m可以省略。

$_ = "yabba dabba doo";
 if(/abba/){
     print "matched";
 }`

2、若模式匹配的对象不是$_的内容,绑定操作符=~用右边的模式来匹配左边的字符串。“

if ($question =~ /please/) { 
print ("Thank you for being polite!\n"); 
} 
else { 
print ("That was not very polite!\n"); 
} 

3、模式中的特殊字符
(1)+ 表示匹配前一个条目一次以上。如:/de+f/指def、deef、deeeeef等。它尽量匹配尽可能多的相同字符,如/ab+/在字符串abbc中匹配的将是abb,而不是ab。

(2)* 表示匹配前一个条目零次或多次。如/de*f/匹配df、def、deeeef等。

(3)?表示前一个条目可有可无。如/de?f/匹配def、df。

(4). 是能匹配任意一个字符的通配符,换行符除外。如/bet.y/可以匹配betty、betsy、bet=y、等等。因此.*会匹配任意字符零次到无限次数。.+会匹配任意字符1次以上。

(5)转义字符\ 如果你想在模式中包含通常被看作特殊意义的字符,须在其前加斜线”\”。如:/*+/中*即表示字符*,而不是上面提到的一个或多个字符的含义。斜线的表示为/\/,点号的表示为/./。

(6)匹配任意字母或数字 [a-z]表示任意小写字母,[A-Z]表示任意大写字母。任意大小写字母、数字的表示方法为:/[0-9a-zA-Z]/。 首字母大写,其余小写表示方法为/[A-Z][a-z]+/。

(7)字符集
\d 任意数字 [0-9]
\D 除数字外的任意字符 [^0-9]
\w 任意单词字符 [_0-9a-zA-Z]
\W 任意非单词字符 [^_0-9a-zA-Z]
\s 空白 [ \r\t\n\f]
\S 非空白 [^ \r\t\n\f]

(8)锚位
^ 或 \A 仅匹配串首
$ 或 \Z仅匹配串尾
\b 匹配单词边界
\B 单词内部匹配

例如:/^def/只匹配以def打头的字符串,/def /def/def /只匹配字符串def(?)。\A和\Z在多行匹配时与^和$不同。
/\bfred\b/可以匹配fred,但无法匹配fredrick、alfred、或manfredmann。
\B它能匹配所有\b不能匹配的位置。因此/\bsearch\B/会匹配searches、searching与searched,但不能匹配search或researching。

(9)匹配指定数目的字符
字符对{}指定所匹配字符的出现次数。如:/de{1,3}f/匹配def,deef和deeef;/de{3}f/匹配deeef;/de{3,}f/匹配不少于3个e在d和f之间;/de{0,3}f/匹配不多于3个e在d和f之间。

(10)择一匹配
字符”|”指定两个或多个选择来匹配模式。如:/def|ghi/匹配def或ghi。

4、模式匹配修饰符(flag)
/g 改变模式中的所有匹配
/i 忽略模式中的大小写
/e 替换字符串作为表达式
/m 将待匹配串视为多行
/o 仅赋值一次
/s 将待匹配串视为单行 。因为点号.无法匹配换行符,那么/s将模式中的每个点号转换成字符集[\d\D]来处理,就是说匹配任意字符,包括换行符。
/x 忽略模式中的空白

5、用s///进行替换
查找并替换,但是该操作只会进行一次替换。s///g可以进行所有可能的不重复的替换。
例如:
s/^\s+//; 将开头的空白替换成空字符串
s/\s+$//; 将结尾的空白替换成空字符串
s/^\s+|\s+$//g; 去除开头和结尾的空白符

6、大小写转换
\U:将其后的所有字符转换成大写的
\L : 将其后的所有字符转换成小写的
\E: 关闭大小写转换的功能
\l和\u: 只影响其后的第一个字符

例如:

$_ = "I saw Barney with Fred";
s/(fred|barney)/\U$1/gi; # "I saw BARNEY with FRED" 
s/(fred|barney)/\L$1/gi; # "I saw barney with fred" 
s/(\w+) with (\w+)/\U$2\E with $1/i; # "I saw FRED with barney" 
s/(fred|barney)/\u$1/ig; # "I saw FRED with Barney" 
s/(fred|barney)/\u\L$1/ig; # "I saw Fred with Barney" 

7、split操作符
my @array = split /separator/, $string;
my @array = split /:/, “abc:def:g:h”; # 得到(“abc”, “def”, “g”, “h”)
split会保留开头处的空字段,舍弃结尾处的空字段
my @array = split /:/, “:::a:g:h:::”; # 得到(“”, “”, “”, “a”, “g”, “h”)

8、join函数

my $result = join $glue@pieces;
注意列表必须至少有两个元素,否则无法用胶水结合成一个字符串。$glue 必须是字符串,而不是模式。
my $result = join ":", 4,6,8;  # 得到4:6:8
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值