强大的Perl中的正则
Perl的正则是相当强大的 Perl 程序中,正则表达式有三种存在形式 分别是 (1?模式匹配:m/<regexp>/???? #平时我们简写 /<regexp>/,略去m, 三个参数 /i不区分大小写?? /s匹配任何字符??? /x添加空格? /o 不重复编译正则表达示 (2?模式替换:s/<pattern>/<replacement>/ ?/g??? 进行全局替换?????????? U ??? 大小写转换,例如s/(fred|barney)/U$1/gi; (3?模式转化:tr/<pattern>/<replacemnt>/ 这三种形式一般都和 =~ 或 !~ 搭配使用,"=~" 表示相匹配(does),"!~" 表示不匹配(doesn’t),并在左侧有待处理的标量变量.如果没有该要处理的变量,则默认为处理 $_ 变量中的内容. ? 表达式中的一些常用模式.
*?? +??? ??? 为这三个数量词的非贪婪的类型 ?perl中的扩展模式匹配 /pattern(?=string)/ 肯定和否定的见匹配?=和?-,这个在(?=)中的内容不会存到$&中 perl处理完后会给匹配到的值存在三个特殊变量名 $&,$`,$’.匹配上的那部分字符串将自动存储在$&之中.变量$1 中的值为 there,而$&为整个被匹配的部分,匹配部分的前一部分存放在$`之中,后一部分被存到$’.另一种说法是,$`中含有正则表达式引擎在匹配 成功前所找到的变量,而$’为此模式还没有匹配的剩余部分.如果将这三个变量放在一起,你将得到原始字符串 括号的特殊用法 (?#text) 忽略括号内的注释文本; ?Perl 中特殊正则元字符使用和环顾断言: 1. *? 和 +? 和 {n,}?? 懒惰匹配
懒惰 2.回溯引用和前后查找: 负向-前/后 查找 (?!…)(?<!..)?? 找字符串前后的内容,如果不存在为真
向前和向后的分别在于,是找当前字符的前面还是后面的部分.如上ab2c121a,比如在2c的前面是ab后面是121a. 条件?() = if ?()| = if else
?()|例如还是上面的,?当有<p>可以接</p>也可以接数字结尾
可选的修饰符
??? 有几个修饰符,通常叫做标记,可以后缀在正则表达式后面来改变其默认的行为.
??? /i :不区分大小写
??? /s :匹配任何字符. 例如: 点(.)不匹配换行符,如果加上/s这个修饰符,它将点(.)的行为变成同字符类[dD]的行为类似,可以匹配任何字符,包括换行符.
??? /x :添加空格. /x修饰符允许你在模式中加入任何数量的空白,以方便阅读.??????
??????? 例如: (/-? d+ .? d* /x) 等同于 (/-?d+.?d*/)
?
??? 将可选修饰符结合起来,其顺序是不重要的. 例如 (/barney.*fred/is)
?
Perl 正则的优化
(1? 使用 /o 来优化要多次运行但不修改的表达示
(2? 使用 qr 在运行前编译要多次运行的正则表达示
(3? 短字符用 /aaa/ || /bbb/ || /ccc/分割比 /aaa|bbb|ccc/ 速度快
?( 4? 试着用 study? 模式来学习正则
判断当前位置的前后字符,是否符合指定的条件,但不匹配前后的字符. 说明预搜索有向前和向后两种:
例如:想要匹配字符a但不匹配abc,可以为/a(?!bc)/ 再如:想要所有以.pl结尾但不是a.pl的文件名,可以/.*(?<!a).pl/; 注意要从右向左, (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |