如果组存在,是否可以添加字符?
preg_replace('/('()?'/:[a-zA-Z0-9]+('))?/', ''/([a-zA-Z0-9]+)', 'm/:x(/:s)');
现在,如果组1或组2存在(真的不重要),我想在字符串的末尾添加一个"?"。有可能在单个正则表达式中完成吗?
编辑:示例
/:x
变为'/([a-zA-Z0-9]+)
,
(/:x)
变为'/([a-zA-Z0-9]+)?
(带问号)
我想知道我是否可以用单个regexp实现这一点。
我用:
$regexCallback = function($r) {
return ''/([a-zA-Z0-9]+)' . (isset($r[1]) ? "?" : "");
};
var_dump(preg_replace_callback('/('()?'/:[a-zA-Z0-9]+('))?/', $regexCallback, $t));
您有另一种方法,只有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)。