设为首页 收藏本站
查看: 810|回复: 0

[经验分享] [技术学习]Perl正则表达式(转载)

[复制链接]

尚未签到

发表于 2017-5-19 08:12:04 | 显示全部楼层 |阅读模式
  1,定界符
=~
m/there/;
=~
s/there/here/;
还有类型的定界符:
=~
/there/
=~
m#there#;
=~
s#there#here#;
=~ m(there);
=~ s(there)(here);
=~
m{there};
=~
s{there}{here};
=~
m[there];
=~
s[there][here];
=~ m,there,;
=~ s,there,here,;
=~ m.there.;
=~ s.there.here.;
=~ m|there|;
=~ s|there|here|;
=~ m
'there';
=~
s'there'here';

2,修改符
修改符一般放在语句最后一个正斜杠(或者其他分隔符)的后面,修改符还可在匹配范式内定义,这是用(? 修改符)来实现的。
/x 允许在范式中加上注释和额外的空白字符,以提高程序的可读性。
/i允许不分大小写的匹配范式。
/s 单行方式,决定了圆点 .是否匹配换行符,使用了/s,圆点就匹配换行符,否则就不匹配。
比如:
#!/usr/bin/perl
use strict;
use warnings;
my$string= "./n.";
print"The original string is: $string/n";
my$num= $string=~ s|(.)|#|sg;
print"$numoccurences change, and be changed to: $string/n";
exit;

/m 多行方式,决定了脱字号 ^ 和美圆符 $ 是否匹配换行符,如果不用/s,^和$只能定位在字串的开始和结束处,它们并不匹配嵌入的换行符,这种情况等同于/A和/Z,否则不仅仅匹配字串的开始和结束,也匹配刚好处在嵌入换行符前后的一个位置。
/o 仅仅一次计算表达式的值
/e 将替代字符串作为一个表达式(仅仅在替代操作时有效)
/g 是一个全局修改符。另外,/g与while使用能在字串的所有匹配中进行遍历。修改符/G必须与/g一起使用,用来匹配前一个/g匹配的停止位置。

#!/usr/bin/perl
use strict;
use warnings;
my$string= "~32sda13dAZ.'sDa#!3_C-!";
print"The original string is: $string/n";
my$num= $string=~ s./w.#.g;
print"$numoccurences change, and be changed to: $string/n";
exit;

3,正则里一些特殊字符
() 将表达式结组
[] 寻找一组字符
/d 等于 [
0-9]
/D 等于 [^
0-9]
/w 等于 [
0-9A-Za-z_]
/W 等于 [^
0-9A-Za-z_]
/s 等于 [/f/n/r/t ]
/S 等于 [^/f/n/r/t ]
. 等于 [^/n]

4,关于一些特殊符号
/b 不属于空白字符,向前缩进一个字符
/t 属于空白字符,匹配制表符
/r 属于空白字符,匹配回车符
/a 不属于空白字符,匹配闹钟符
/e 不属于空白字符,匹配转义符
/
033不属于空白字符,匹配八进制符
/x1B 不属于空白字符,匹配十六进制符
/c[ 不属于空白字符,匹配控制字符
属于空白字符,匹配空格
属于空白字符,匹配制表符
/f 属于空白字符,匹配换页符
/n 属于空白字符,匹配换行符
/
0不属于空白字符,功能不详
/c 不属于空白字符,功能不详
/x 不属于空白字符,功能不详

5,注意正则里的选择符的特殊性
选择运算符是所有运算符中优先级最低的,这意味着它最后执行。

6,正则里的限定符的一些经典用法
限定符常常与一些字符或词联合使用
* 匹配任意数个;
+ 匹配一个或多个;
? 匹配零个或一个;
{n} 匹配 n 个;
{n,m} 匹配 n 至 m 个;
{n,} 匹配 n 和 n 个以上;
限定符贪婪好像与生俱有的。在缺省状态下,*或+限定符匹配满足正则表达式的一个范式的最大实例数。可用?号显式的规定限定符的不贪婪。如果问号放在另一个限制符之后(甚至另一个问号之后),都可以使限定符不贪婪。

7,声明与断言
首先注意声明的长度为
0
Perl种有一组控制大小写和换码的声明:
/u 使下一个字母变大写;
/l 使下一个字母变小写;
/U 使文本的剩余字符变成大写;
/L 使文本的剩余字符变成小写;
/Q 会除字母之外的其他字符进行换码处理,直至遇到 /E 声明、常规表达式结束或者字串结束。
/A声明和脱字符号(^)匹配字串的开始;
/Z声明和美元符号($)匹配字串的结束或刚好在字串结束前的换行符;
/z 只匹配字串的结束;
/b 匹配一个单词(字)边界;
/B 匹配一个非单词(字)边界;
(?
#text) 忽略括号内的注释文本;
(?:pattern) 与组一致,但匹配时不生成
$1,$2
(?imsx:pattern) 与组一致,但匹配时不生成
$1,$2,在特定的风格有效期间,内嵌风格匹配修饰符;
(?=pattern) 前看声明,如果正则表达式在下一次匹配 pattern 风格,就开始匹配,而且不影响匹配效果。如//w+(?=/t)/将匹配制表符是否恰好在一个字/w+后面出现,并且制表符不添加到
$&的值中;
(?!pattern) 如果正则表达式在后面不匹配 pattern ,才会开始匹配。如/foo(?!bar)/,只有当出现 foo,并且后面不出现 bar 时才开始匹配;
(?<=pattern) 后看声明,只有在pattern已经匹配下面的表达式,并且不将 pattern 的结果放入
$&变量中,才匹配下面的语句。如/(?<=/t)/W+/匹配制表符是否恰好在/W+前出现,但又不将制表符送到$&中;
(? (?[code]) 表示对 code 的使用是试验性的。如果返回真,就认为是与(?:pattern)断言同一行里的匹配。code 不插入变量。这个断言仅仅在
use re 'eval'编译指示符时才有效;
(?>pattern) 如果类型锁定在当前位置,就使用单独的 pattern 匹配子字符串。如正则表达式/^(?>a*)ab/永远不会匹配,因为语句(?>a*)将匹配字符串开头所有的 a 字符,并删除与 ab 匹配的字符 a;
(!<=pattern) 非后看声明,与后看声明意思相反;
(!=pattern) 非前看声明,与前看声明意思相反;
(?(condition)yes-pattern|no-pattern) 条件表达式——条件语句或者是一个圆括号中的整数,或者是一个断言;
(?(condition)yes-pattern)
(?imsx) 嵌入风格匹配修饰符。当要把表达式修改符嵌入在变量中,然后把变量用在不指定自己的修饰符的一般规则表达式中;
(?-imsx) 这个断言很有用——后面带任何内容都会关闭修饰符,直到出现另一个嵌入的修饰符。

8,向后引用
Perl的正则表达式引擎允许使用前面匹配好的值,这些值叫做向后引用。
例如:
=~
m/(/w)/W*(/w)/W*(/w)/W*(/w)/W*/4/W*/3/W*/2/W*/1/;
=~
s/(/w)/W*(/w)/W*(/w)/W*(/w)/$4$3$2$1/;

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-378899-1-1.html 上篇帖子: 用Perl实现网站自动登录 下篇帖子: perl中localtime,time,gmtime的区别
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表