如果组存在,是否可以添加字符?
preg_replace('/(\()?\/:[a-zA-Z0-9]+(\))?/', '\/([a-zA-Z0-9]+)', 'm/:x(/:s)');
现在,如果第1组或第2组存在(并不重要),我想添加一个“?”在字符串的末尾。是否可以在单个正则表达式中进行?
编辑:示例
/:x
变为\/([a-zA-Z0-9]+)
BUT
(/:x)
应变为\/([a-zA-Z0-9]+)?
(带问号)
我想知道我是否可以通过SINGLE正则表达式实现这一目标。
答案 0 :(得分:0)
我用以下方法解决了这个问题:
$regexCallback = function($r) {
return '\/([a-zA-Z0-9]+)' . (isset($r[1]) ? "?" : "");
};
var_dump(preg_replace_callback('/(\()?\/:[a-zA-Z0-9]+(\))?/', $regexCallback, $t));
答案 1 :(得分:0)
你有另一种只有preg_replace
的方法,因为你可以为模式和替换参数提供一个数组:
$patrep = array ('~\(/:[a-z0-9]+\)~i' => '\/([a-zA-Z0-9]+)?',
'~/:[a-z0-9]+~i' => '\/([a-zA-Z0-9]+)');
$result = preg_replace(array_keys($patrep), $patrep, $str);
通过这种方式,原始字符串被处理两次。但是,它可能比使用preg_replace_callback
更快,具体取决于原始字符串的外观(大小,出现的nb)。