perl正则表达式(二)
2016-05-15 12:57
323 查看
指定字符的集合符号
[ ]
用来指定字符集合中的一个字符。“[]"在模式中的作用是指定一个字符集,在进行模式匹配时,只要是"[]"中的任意一个字符就能够匹配该模式。若其后没有与表示字符出现次数的符号结合使用,则一次匹配括号中的一个字符。
![](http://img.blog.csdn.net/20160515130242338?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
当采用"[]"来表示一个可选字符的集合时,若该可选字符集合具有整体性,则可以采用该字符集合的缩写形式。模式/[0-9a-zA-Z]/中,0-9表示数字字符集,a-z表示26个英文小写字母集,A-Z表示26个英文大写字母集,该模式表示含数字、英文字母中任意1个字符的字符串。
[^]
将"^"紧挨着左方括号([^),可以用来表示“集合的否定”,即表示“给定字符集合意外的任意一个字符”的语义。
![](http://img.blog.csdn.net/20160515131100941?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
由上可知,"[^]"是"[]"的一个改造。它仍旧表示一个指定集合里的任意一个字符,只不过在匹配这个指定集合之前,已经对原指定集合里的内容进行一次“非”的转化,即被匹配的字符不能够是原指定集合内的字符。
.
点号(.)是除了换行符(\n)以外的任何单字符的通用匹配符。因此,它常用来匹配一个任意字符。
![](http://img.blog.csdn.net/20160515131852563?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
如果字符串中含有换行符,而又希望能用点号来匹配它们,就需要与"/s"开关修饰符结合使用。
“\"
正则表达式中,所有在双引号中的转义字符,如"\t\r\n",在模式匹配中均具有等效的语义。此外,一些具有特殊含义的字符(称为元字符),如果需要在模式中作为普通字符使用,它们就需要与转义字符(\)结合使用。
![](http://img.blog.csdn.net/20160515132839021?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
程序要求的是提取方括号中的字符串。
字符范围转义符号
在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语言的模式中,除了表示集合、表示出现次数的符号外,还有一些符号是用来表示位置的,称为“锚点符号”
/^/ 仅匹配串首
/$/ 仅匹配串尾
/^/
/^/("^"符号紧跟模式的左边界符(/))表示用"^"之后的内容来匹配字符串的头部。注意此时的"^"是出现在"[]"之外,出现在方括号之内才表示“该集合内容的非”
![](http://img.blog.csdn.net/20160515135358406?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
/$/
/$/('$'符号紧挨模式的右边界符(/)),表示用"$"之前的内容来匹配字符串的尾部。例如,/good bye$/用来匹配以"good bye"结尾的字符串。
![](http://img.blog.csdn.net/20160515140046818?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
如果模式为/^good bye$/,那么这个字符串就应该以"good bye"开头并且以"good bye"结尾,即该字符串只能是"good bye".
其他符号
正则表达式使用"|"符号可以实现多个模式的任选,表示字符串中的子串只要能匹配多个模式中的任意一个模式,字符串就是匹配的。即正则表达式中,"|"符号发挥”逻辑或“的作用。
![](http://img.blog.csdn.net/20160515140658692?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
[ ]
用来指定字符集合中的一个字符。“[]"在模式中的作用是指定一个字符集,在进行模式匹配时,只要是"[]"中的任意一个字符就能够匹配该模式。若其后没有与表示字符出现次数的符号结合使用,则一次匹配括号中的一个字符。
<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>
相关文章推荐
- [可持久化字典树 分块] BZOJ 2741 【FOTILE模拟赛】L
- 第11周学习进度
- TCP/IP协议概述
- 动态sql和模糊查询
- 学习SpringMVC(六)之ModelAndView
- 自定义input checkBox的样式
- 什么是跨域
- FreeMarker模板开发指南知识点梳理
- PostgreSQL 9.6 Beta 1 发布了
- 内存管理原则
- [可持久化字典树 set] BZOJ 3166 [Heoi2013]Alo
- iOS冰与火之歌番外篇 - 在非越狱手机上进行App Hook
- essential c++ 练习题(2)
- Andriod 学习笔记之八 自定义view实现圆圈标记
- HTML5表单及其验证
- 【模板】高斯消元
- Java常见内存溢出异常分析
- LayoutInflater
- 关于算法复杂度
- [可持久化字典树] BZOJ 3261 最大异或和