希望你能帮上忙。正则表达式很新,虽然我已经写了这个正则表达式,但它似乎不匹配。我没有收到错误消息,所以我假设语法正确,但它只是没有应用?
我希望正则表达式替换诸如
{foo}bar{/foo} with 酒吧
这是我的代码:
$regex = "#([{].*?[}])(.*?)([{]/.*?[}])#e";
$return = preg_replace($regex,"('$2')",$return);
希望有人能帮忙。不知道为什么它似乎不起作用。
感谢您的阅读。
您的正则表达式确实有效,但是它不够聪明,无法知道结束标签必须与开始标签相同。我会改用这个。我也简化了一点:
$regex = '#{([^}]*)}(.*?)'{/''1}#';
echo preg_replace('{foo}bar{/foo}', '$2', $str); // outputs "bar"
代码板
参考我上面的评论:
#(?:[{](.*?)[}])(.*?)(?:[{]/'1[}])#
使用反向引用来保持标记相等。此外,我使用非捕获括号来阻止无用的组:$1
将是标签名称,$2
将是标签内容。
请注意,如果您的标签可以嵌套,则必须多次应用替换。