perl正则表达式(二)

指定字符的集合符号

[ ]

用来指定字符集合中的一个字符。“[]"在模式中的作用是指定一个字符集,在进行模式匹配时,只要是"[]"中的任意一个字符就能够匹配该模式。若其后没有与表示字符出现次数的符号结合使用,则一次匹配括号中的一个字符。

<span style="font-size:10px;">$string="aa1bb";
if($string=~/a[0-9]b/){
	print "$&\n";
	}</span>

当采用"[]"来表示一个可选字符的集合时,若该可选字符集合具有整体性,则可以采用该字符集合的缩写形式。模式/[0-9a-zA-Z]/中,0-9表示数字字符集,a-z表示26个英文小写字母集,A-Z表示26个英文大写字母集,该模式表示含数字、英文字母中任意1个字符的字符串。

[^]

将"^"紧挨着左方括号([^),可以用来表示“集合的否定”,即表示“给定字符集合意外的任意一个字符”的语义。

<span style="font-size:10px;">$string="aa1234567bb";
if($string=~/[^ab]+/){
	print $&;
	}</span>

由上可知,"[^]"是"[]"的一个改造。它仍旧表示一个指定集合里的任意一个字符,只不过在匹配这个指定集合之前,已经对原指定集合里的内容进行一次“非”的转化,即被匹配的字符不能够是原指定集合内的字符。

.

点号(.)是除了换行符(\n)以外的任何单字符的通用匹配符。因此,它常用来匹配一个任意字符。

<span style="font-size:10px;">#程序功能:找出数组@array中以"ab"开头,以"c"结尾的长度为4的成员
@array=("abac","abbc","ab1c","ab\nc");
foreach $value (@array){
	if($value=~/ab.c/){
		print "T\t";
		}
	else{
		print "F\t";
		}
	}</span>

如果字符串中含有换行符,而又希望能用点号来匹配它们,就需要与"/s"开关修饰符结合使用。

“\"

正则表达式中,所有在双引号中的转义字符,如"\t\r\n",在模式匹配中均具有等效的语义。此外,一些具有特殊含义的字符(称为元字符),如果需要在模式中作为普通字符使用,它们就需要与转义字符(\)结合使用。

<span style="font-size:10px;">$string="[123 abc]";
if($string=~/[^\[\]]+/){
	print $&;
	}</span>

程序要求的是提取方括号中的字符串。

字符范围转义符号

在perl语言的具体应用中有一些字符集会频繁出现,perl语言提供了这些字符集的简写形式。即允许通过一个转义符号紧跟一个特定字母的形式来表示一个特定范围内的所有符号。perl语言将这种表示形式称为字符的范围转义。

\s [ \f\t\n\r] 空白字符集

\S [^ \f\t\n\r] 非空白字符集

\d [0-9] 任意数字字符集

\D [^0-9] 任意非数字字符集

\w [0-9A-Za-z] 任意数字、字母及下划线字符集

\W [^0-9A-Za-z] 任意非数字、字母及下划线字符集

注:[ \f\t\n\r]表示5种不同形式的空白字符的字符集:空格、换页、制表、换行、回车。

字符出现次数符号

? 出现0次或1次

* 出现0次或0次以上

+ 出现1次及1次以上

{a,b} 最少出现a次,最多出现b次(a和b均为数字)

注:在perl语言的正则表达式中,表示字符出现次数的符号,它不能单独使用,需要与前一个表示字符的符号或集合符号相结合使用。

{ }对出现的次数进行精确的限制,最高次数可以为空,表示出现次数没有上限。模式/a{2,}/,最少出现次数是2,最多出现次数不限。

锚点符号

在perl语言的模式中,除了表示集合、表示出现次数的符号外,还有一些符号是用来表示位置的,称为“锚点符号”

/^/ 仅匹配串首

/$/ 仅匹配串尾

/^/

/^/("^"符号紧跟模式的左边界符(/))表示用"^"之后的内容来匹配字符串的头部。注意此时的"^"是出现在"[]"之外,出现在方括号之内才表示“该集合内容的非”

<span style="font-size:10px;">#程序功能:在数组@array中找出以"hello"开头的成员
@array=("hello","hi,hello"," hello","ab\nc");
foreach (@array){
	if(/^hello/){
		print "T\t";
		}
	else{	print "F\t";
		}
	}</span>


/$/

/$/('$'符号紧挨模式的右边界符(/)),表示用"$"之前的内容来匹配字符串的尾部。例如,/good bye$/用来匹配以"good bye"结尾的字符串。

<span style="font-size:10px;">#程序功能:在数组@array中找出以"good bye"结尾的成员
@array=("hello","hi,good bye","good bye!","good bye bye");
foreach (@array){
	if(/good bye$/){
		print "T\t";
		}
	else{
		print "F\t";
		}
	}</span>

 如果模式为/^good bye$/,那么这个字符串就应该以"good bye"开头并且以"good bye"结尾,即该字符串只能是"good bye".

  其他符号

正则表达式使用"|"符号可以实现多个模式的任选,表示字符串中的子串只要能匹配多个模式中的任意一个模式,字符串就是匹配的。即正则表达式中,"|"符号发挥”逻辑或“的作用。

<span style="font-size:10px;">$str="abbcd";
if($str=~/abc|bcd/){
	print $&;
	}</span>

                                                                                                                                 






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值