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