C#正则表达式高级技巧及实例详解
2009-06-10 08:32:04 来源:WEB开发网7. 回调(Callbacks)
匹配结果中的特定内容有时可能会需要某种特别的修改。要应用多重而复杂的修改,正则表达式的回调就有了用武之地。回调是用于函数preg_replace_callback中的动态修改字串的方式。你可以为preg_replace_callback指定某个函数为参数,此函数能接收匹配结果数组为参数,并将数组修改后返回,作为替换的结果。
例如,我们想将某字串中的字母全部转变成大写。十分不巧,PHP没有直接转化字母大小写的正则操作符。要完成这项任务,就可以用到正则回调。
首先,表达式要匹配出所有需要被大写的字母:
/\b\w/
上式同时使用了字词边界和字符类。光有这个式子还不够,我们还需要一个回调函数:
function upper_case( $matches ) {
return strtoupper( $matches[0] );
}
函数upper_case接收匹配结果数组,并将整个匹配结果转化成大写。 在此例中,$matches[0]代表需要被大写化的字母。然后,我们再利用preg_replace_callback实现回调:
preg_replace_callback( '/\b\w/', "upper_case", $str );
一个简单的回调即有这般强大的力量。
8. 注释(Commenting)
注释不用来匹配字串,但确实是正则表达式中最重要的部分。当正则越写越深入,越写越复杂,要推译出究竟什么东西被匹配就会变得越来越困难。在正则表达式中间加上注释,是最小化将来的迷糊和困惑的最佳方式。
要在正则表达式内部加上注释,使用(?#comment)格式。把“comment”替换成你的注释语句:
/(?#数字)\d/
如果你打算把代码公之于众,为正则表达式加上注释就显得尤为重要。这样别人才能更容易看懂和修改你的代码。和其他场合的注释一样,这样做也能为你重访自己以前写的程序时提供方便。
考虑使用“x”或“(?x)”修改器来格式化注释。这个修改器让正则引擎忽略表达式参数之间的空格。“有用的”空格仍然能够通过[ ]或\s,或者\ (反义符加空格)来匹配。
/
\d #digit
[ ] #space
\w+ #word
/x
上面的代码与下面的式子作用一样:
/\d(?#digit)[ ](?#space)\w+(?#word)/
请时刻注意代码的可读性。
更多资源(英文)
Regular-Expressions.info Comprehensive website on regular expressions Cheat SheetInformative regular expressions cheat sheet Regex GeneratorJavaScript regular expressions generator 关于作者
Karthik Viswanathan 是一个喜欢编程和做网站的高中生。你可以到他的博客上查看他的作品:Lateral Code。你也可以关注一下他的线上Twitter应用。
更多精彩
赞助商链接