全面认识Perl正则表达式使用
Perl正则表达式是Perl语言的一大特色,也是Perl程序中的一点难点,不过如果大家能够很好的掌握他,就可以轻易地用Perl正则表达式来完成字符串处理的任务,当然在CGI程序设计中就更能得心应手了。下面我们列出一些Perl正则表达式书写时的一些基本语法规则。
Perl正则表达式
Perl正则表达式之元字符:
.匹配除\n外的任意一个字符
\转义符
Perl正则表达式之量词:
{3}匹配前一单元的三个*?{0,}?匹配前一单元的零个或多个
+?{1,}?匹配前一单元的一个或多个
??{0,1}?匹配前一单元的零个或一个
*{0,}匹配前一单元的多个或零个贪
+{1,}匹配前一单元的多个或一个贪
?{0,1}匹配前一单元的一个或零个贪
Perl正则表达式之编组:
()编组且触发记忆(?:)编组但不触发记忆Perl正则表达式之多个选择:
Perl正则表达式之文法和算符优先级:
'()','(?:)'>
'*','*?','+','+?','?','??','{}','{}?'>
''>
'|'
<regexp>-><regexp>'|'<concat>|<concat>
<concat>-><concat><repeat>|<repeat>
<repeat>-><repeat>('*'|'+'|'?'|'{'<int>'}')|<paren>
<paren>->'('<regexp>')'|'(?:'<regexp>')'|<char>
Perl正则表达式之字符类:
[abcwxyz]==[a-cw-z]
\d==[0-9]
\D==[^0-9]
\w==[a-zA-Z0-9_]
\W==[^a-zA-Z0-9_]
\s==[\f\t\n\r]
\S==[^\f\t\n\r]
Perl正则表达式之选项修饰符:
/i使匹配大小写不敏感
/s使.匹配任意字符,包含'\n',等价于[\d\D]
/x允许Perl正则表达式中用空白和注释来增强可读性,空格文字和制表符文字等等将被忽略,只能用\s、\t等表示。/m匹配多行目标串时,改^和$的意义为行首锚和行尾锚
/g无重叠全局替换修饰符
Perl正则表达式之锚:
^串首锚
$串尾锚
\b单词边界锚参考\w
\B非单词边界锚
Perl正则表达式之绑定算子:
=~非赋值运算符也,绑定运算符也,It's曰ing:不处理$_了,处理我左边的那个家伙Perl正则表达式插值:
双引插值规则Perl正则表达式之匹配变量
()不仅用于Perl正则表达式的编组,也触发匹配引擎的记忆,引擎会将整个匹配段中与括号内Perl正则表达式对应的那部分存入记忆体内。自1编号,引用以$1,$2,...
记忆至下一次匹配成功时结束$&$MATCH整个匹配段
$`$PREMATCH匹配段之前的子串
$'$POSTMATCH匹配段之后的子串
Perl正则表达式举例:
/^fred|barney$/要么以fred打头,要么以barney结尾的串/^(fred|barney)$/
/(wilma|pebbles?)/
/^fred|barney$/m #p#
Perl正则表达式之文本处理替换:
分隔符规则:s#^https://#http://#;
s{fred}{barney};
s[fred](barney);
s<fred>#barney#;
绑定算子:=~
大小写切换:\U此处起至\E全部大写
\L此处起至\E全部小写
\u下一个字母大写
\l下一个字母小写
举例:s/(bush|mandola)/\u\L$1/ig
Perl正则表达式之split算子
语法:split/PATTERN/,EXPR,LIMIT
以/PATTERN/分割EXPR,最多分成LIMIT份若LIMIT省略且尾部为空串,则丢弃它若LIMIT为负值,则视其为无穷大EXPR缺省为$_
/PATTERN/缺省为/\s+/
Perl正则表达式之列表环境下的m//:返回引擎记忆体中的变量。
my$data="BarneyRubbleFredFlintstoneWilmaFlintstone";
my%last_name=($data=~/(\w+)\s+(\w+)/g);
my@arr=($data=~/(\w+)\s+(\w+)/g);
Perl正则表达式之匹配多行文本:
^和$普通模式下是串首锚和串尾锚,在/m(多行模式)下为行首锚和行尾锚
\A匹配串首,\Z匹配串尾
/^nat/m===/^nat|\nnat/
openFILE,$filename
ordie"Can'topen'$filename':$!";
my$lines=join'',<FILE>;
$lines=~s/^/$filename:/gm;
Perl正则表达式之更新多个文件:
钻石符号<>的魔力:他会自动地为你打开和关闭在命令行指定的一系列文件,若命令行没有指定任何文件名,他就打开标准输入。$^I会改变<>的行为,若$^I不是undef,则<>会将文件重命名以"文件名".
"$^I",然后创建名为"文件名"的文件,然后打开重命名后的文件以读,打开新建的文件以写。
【编辑推荐】
- 解析Perl正则表达式用法
- Perl正则表达式的三种形式
- 学习笔记 全面认识Perl正则表达式
- Perl正则表达式内容盘点
- Perl正则表达式的三种形式和八大原则