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

Emm*_*uel 2 php regex preg-match

这是我的代码

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

基本上,在正则表达式中我有一个管道 |,并且我正在搜索两种模式。如果与第一个模式(管道左侧)匹配,那么我希望将其替换为第二个捕获组($2),但如果它与第二个模式匹配(管道右侧)管道),然后我希望将其替换为第一个捕获组($1);

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

谢谢你的帮助。

Wri*_*ken 5

> PHP 5.3:

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

< PHP 5.3:

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

或者,在较旧的 PHP 版本中(该/e修饰符自 5.5 起已被弃用)。

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