php preg_replace检查第二个捕获组是否包含数据

时间:2010-09-30 19:48:33

标签: php regex preg-match

这是我的代码

$string = preg_replace("/rad\:([0-9]+)px\;\s+\/\*\sALT\[(.+)\*\/|rad\:([0-9]+)px\;/",("$2"?"$2":"$1"),$string);

基本上,在正则表达式中我有一个管道,我正在寻找两种模式。 如果第一个模式(管道的左侧)匹配,那么我希望用第二个捕获组($ 2)替换它,但如果它与第二个模式匹配(在第二个模式的右侧)管道),然后我希望它被第一个捕获组($ 1)替换;

我试过的代码不起作用。 这有可能吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

> PHP 5.3:

 preg_replace_callback('..pattern...',
    function($match){return empty($match[2]) ? $match[1]:$match[2];},
    $string);

< PHP 5.3:

 function _my_func($match) {
    return empty($match[2]) ? $match[1]:$match[2];
 }
 preg_replace_callback('..pattern...',
    '_my_func',
    $string);

或者,旧的PHP版本,(/e修饰符有since 5.5 been deprecated)。

preg_replace('...pattern..../e','strlen("$2") > 0?"$2":"$1"',$string);