前言
前几天看php手册匿名函数一章时,看到示例
1 |
|
初看时,对这三行代码有点懵…一时没转过来,没想明白为什么是这结果,这是为什么呢?
正则定界符
其实刚开始是对 ‘~-([a-z])~‘ 比较懵,正则表达式虽然写了不少,但也仅限于使用时对照手册,没有深入了解…在翻阅资料后恍然大悟.
平日里写正则表达式默认是以反斜线//作为正则表达式的定界符,因缺少探索,久而久之理所当然的默认定界符只能用//
然而资料里关于定界符的描述是这样的
定界符,也称为分隔符,一般为正斜杠 (正斜线)/,但实际上除了字母、数字和反斜线以外的任何字符都可以作为定界符号,只要前后成对出现即可,比如##、||、//、{}、!!、%% 等等。
也就是说,只要你喜欢,你可以用 {} [] %% $$ 等等作为定界符…不过,在没有特殊情况下,还是用建议用//
看懂这则正则表达式,再来看上面这个示例就会变得简单起来了.
preg_replace_callback
在preg_replace_callback的官方文档里,是这样描述的
preg_replace_callback ( mixed $pattern , callable $callback , mixed $subject [, int $limit = -1 [, int &$count ]] ) : mixed
这个函数的行为除了 可以指定一个 callback 替代 replacement 进行替换 字符串的计算,其他方面等同于 preg_replace()
那上面的示例可以理解为
1 |
|
实战
知道 preg_replace_callback 的原理后,我们把最上面的例子稍微修改下
1 |
|
上面修改后的例子就可以在实战中用来把下划线命名法(UnderScoreCase)替换成驼峰命名法(CamelCase)不考虑性能消耗的情况
总结
时刻保持探索精神,遇到让人懵逼的问题,及时补充,消灭它.当你查资料文档解决问题的时候,无形中补充了自己的知识面