Perl正则表达式与安全编程技巧深度解析
1. 正则表达式中的前瞻和后瞻断言
在正则表达式里,前瞻断言和后瞻断言是非常实用的工具。 (?!PATTERN) 是前瞻断言,它会在当前匹配位置之后进行检查。比如下面的代码:
if( 'foobar' =~ /(?!foo)bar/ ) {
print "Matches! That's not what I wanted!\n";
}
else {
print "Doesn't match! Whew!\n";
}
这里的前瞻断言表明,在 bar 中的 b 之前的内容不能是 foo 。由于后续内容是 bar 而非 foo ,所以匹配成功。
后瞻断言有两种形式: (?<!PATTERN) 和 (?<=PATTERN) 。与前瞻断言不同,后瞻断言用于检查正则表达式引擎已经处理过的字符串部分。不过,由于Perl的实现细节,后瞻断言必须是固定宽度的,不能使用可变宽度的量词。例如,要匹配不紧跟 foo 的 bar ,可以使用负向后瞻断言:
#!/usr/bin/perl
# correct_foobar.pl
if( 'foobar' =~ /(?<
超级会员免费看
订阅专栏 解锁全文
88

被折叠的 条评论
为什么被折叠?



