强大的Perl中的正则

转载本站文章请注明,转载自:扶凯[http://www.php-oa.com]

本文链接: http://www.php-oa.com/2008/12/20/power-perl.html

 

Perl的正则是相当强大的

Perl 程序中,正则表达式有三种存在形式

分别是

(1 模式匹配:m/<regexp>/     #平时我们简写 /<regexp>/ ,略去m,

三个参数

/i不区分大小写

/s匹配任何字符

/x添加空格

(2 模式替换:s/<pattern>/<replacement>/

 /g    进行全局替换
/U     大小写转换,例如s/(fred|barney)//U$1/gi;
/L    转换小写
/E    影响到剩余的(替换的)字符串
/l 和/u    写形式时(/l 和/u),只作用于下一个字符

(3 模式转化:tr/<pattern>/<replacemnt>/

这三种形式一般都和 =~ 或 !~ 搭配使用,"=~" 表示相匹配(does),"!~" 表示不匹配(doesn't),并在左侧有待处理的标量变量。如果没有该要处理的变量,则默认为处理 $_ 变量中的内容。

 

表达式中的一些常用模式。

/表达式/结果
.匹配除换行符以外的所有字符
x?匹配 0 次或一次 x 字符串
x*匹配 0 次或多次 x 字符串,但匹配可能的最少次数
x+匹配 1 次或多次 x 字符串,但匹配可能的最少次数
.*匹配 0 次或多次的任何字符
.+匹配 1 次或多次的任何字符
{m}匹配刚好是 m 个 的指定字符串
{m,n}匹配在 m个 以上 n个 以下 的指定字符串
{m,}匹配 m个 以上 的指定字符串
[]匹配符合 [] 内的字符
[^]匹配不符合 [] 内的字符
[0-9]匹配所有数字字符
[a-z]匹配所有小写字母字符
[^0-9]匹配所有非数字字符
[^a-z]匹配所有非小写字母字符
^匹配字符开头的字符
$匹配字符结尾的字符
/d匹配一个数字的字符,和 [0-9] 语法一样
/d+匹配多个数字字符串,和 [0-9]+ 语法一样
/D非数字,其他同 /d
/D+非数字,其他同 /d+
/w英文字母或数字的字符串,和 [a-zA-Z0-9] 语法一样
/w+和 [a-zA-Z0-9]+ 语法一样
/W非英文字母或数字的字符串,和 [^a-zA-Z0-9] 语法一样
/W+和 [^a-zA-Z0-9]+ 语法一样
/s空格,和 [/n/t/r/f] 语法一样
/s+和 [/n/t/r/f]+ 一样
/S非空格,和 [^/n/t/r/f] 语法一样
/S+和 [^/n/t/r/f]+ 语法一样
/b匹配以英文字母,数字为边界的字符串
/B匹配不以英文字母,数值为边界的字符串
a|b|c匹配符合a字符 或是b字符 或是c字符 的字符串
abc匹配含有 abc 的字符串
(pattern)() 这个符号会记住所找寻到的字符串,是一个很实用的语法。第一个 () 内所找到的字符串变成 $1 这个变量或是 /1 变量,第二个 () 内所找到的字符串变成 $2 这个变量或是 /2 变量,以此类推下去。
/pattern/ii 这个参数表示忽略英文大小写,也就是在匹配字符串的时候,不考虑英文的大小写问题。
/如果要在 pattern 模式中找寻一个特殊字符,如 "*",则要在这个字符前加上 / 符号,这样才会让特殊字符失效

*?  +?   ??  为这三个数量词的非贪婪的类型

 

perl处理完后会给匹配到的值存在三个特殊变量名

$&, $`, $'。匹配上的那部分字符串将自动存储在$&之中.变量$1 中的值为 there,而$&为整个被匹配的部分,匹配部分的前一部分存放在$`之中,后一部分被存到$'。另一种说法是,$`中含有正则表达式引擎在匹配成功前所找到的变量,而$'为此模式还没有匹配的剩余部分。如果将这三个变量放在一起,你将得到原始字符串

括号的特殊用法

(?#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) 这个断言很有用——后面带任何内容都会关闭修饰符,直到出现另一个嵌入的修饰符。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值