这是我的代码
$string = preg_replace("/rad\:([0-9]+)px\;\s+\/\*\sALT\[(.+)\*\/|rad\:([0-9]+)px\;/",("$2"?"$2":"$1"),$string);
基本上,在正则表达式中我有一个管道,我正在寻找两种模式。 如果第一个模式(管道的左侧)匹配,那么我希望用第二个捕获组($ 2)替换它,但如果它与第二个模式匹配(在第二个模式的右侧)管道),然后我希望它被第一个捕获组($ 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);