PHP - preg_replace - 如果当前为空,则使用其他替换
PHP - preg_replace - use other substitution if the current one is empty
我有这个preg_replace
preg_replace('/\[link=(.*?)\](.*?)\[\/link\]/', '<a href=""></a>', $input);
对于这个数据
$input = "[link=xxx]xxx[/link] [link=yyy][/link]"
它产生:
<a href="xxx">xxx</a> <a href="yyy"></a>
不过,我希望结果是
<a href="xxx">xxx</a> <a href="yyy">yyy</a>
我能否以某种方式使用 </code>,如果字符串为空,则在 <code>preg_replace
替换中使用 </code>?我不想使用 <code>preg_replace
.
的回调版本
正如@mario 指出的那样,您需要使用 preg_replace_callback
来解决这样的问题。在回调中,您可以检查是否有第二组匹配,如果没有,则在 <a>
元素内重复第一个匹配:
$input = "[link=xxx]xxx[/link] [link=yyy][/link]";
echo preg_replace_callback('/\[link=(.*?)\](.*?)\[\/link\]/',
function ($m) {
return "<a href=\"$m[1]\">" . (strlen($m[2]) ? $m[2] : $m[1]) . '</a>';
},
$input);
输出
<a href="xxx">xxx</a> <a href="yyy">yyy</a>
我有这个preg_replace
preg_replace('/\[link=(.*?)\](.*?)\[\/link\]/', '<a href=""></a>', $input);
对于这个数据
$input = "[link=xxx]xxx[/link] [link=yyy][/link]"
它产生:
<a href="xxx">xxx</a> <a href="yyy"></a>
不过,我希望结果是
<a href="xxx">xxx</a> <a href="yyy">yyy</a>
我能否以某种方式使用 </code>,如果字符串为空,则在 <code>preg_replace
替换中使用 </code>?我不想使用 <code>preg_replace
.
正如@mario 指出的那样,您需要使用 preg_replace_callback
来解决这样的问题。在回调中,您可以检查是否有第二组匹配,如果没有,则在 <a>
元素内重复第一个匹配:
$input = "[link=xxx]xxx[/link] [link=yyy][/link]";
echo preg_replace_callback('/\[link=(.*?)\](.*?)\[\/link\]/',
function ($m) {
return "<a href=\"$m[1]\">" . (strlen($m[2]) ? $m[2] : $m[1]) . '</a>';
},
$input);
输出
<a href="xxx">xxx</a> <a href="yyy">yyy</a>