全面认识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                                 

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正则表达式之更新多个文件:

相关推荐