分类: LINUX
2013-10-17 15:23:41
原文地址:Perl中强大的正则表达式 作者:huifeideluotuo
Perl的正则是相当强大的!!!!!
Perl 程序中,正则表达式有三种存在形式
分别是
(1 模式匹配:m/
三个参数
/i不区分大小写
/s匹配任何字符
/x添加空格
(2 模式替换:s/
/g 进行全局替换
\U 大小写转换,例如s/(fred|barney)/\U$1/gi;
\L 转换小写
\E 影响到剩余的(替换的)字符串
\l 和\u 写形式时(\l 和\u),只作用于下一个字符
(3 模式转化:tr/
这三种形式一般都和 =~ 或 !~ 搭配使用,"=~" 表示相匹配(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/i | i 这个参数表示忽略英文大小写,也就是在匹配字符串的时候,不考虑英文的大小写问题。 |
\ | 如果要在 pattern 模式中找寻一个特殊字符,如 "*",则要在这个字符前加上 \ 符号,这样才会让特殊字符失效 |
*? +? ?? 为这三个数量词的非贪婪的类型
perl处理完后会给匹配到的值存在三个特殊变量名
$&, $`, $'。匹配上的那部分字符串将自动存储在$&之中.变量$1 中的值为 there,而$&为整个被匹配的部分,匹配部分的前一部分存放在$`之中,后一部分被存到$'。另一种说法是,$`中含有正则表达式引擎在匹配 成功前所找到的变量,而$'为此模式还没有匹配的剩余部分。如果将这三个变量放在一起,你将得到原始字符串