1

希望你能提供帮助。正则表达式很新,虽然我写了这个正则表达式,但它似乎不匹配。我没有收到错误消息,所以我假设语法是正确的,但它只是没有被应用?

我希望正则表达式替换内容

{foo}bar{/foo}bar

这是我的代码:

$regex = "#([{].*?[}])(.*?)([{]/.*?[}])#e";
$return = preg_replace($regex,"('$2')",$return);

希望有人可以提供帮助。不知道为什么它似乎不起作用。

谢谢阅读。

4

2 回答 2

3

您的正则表达式确实有效,但是它不够聪明,无法知道结束标记必须与开始标记相同。我会改用这个。我也简化了一点:

$regex = '#{([^}]*)}(.*?)\{/\\1}#';

echo preg_replace('{foo}bar{/foo}', '$2', $str); // outputs "bar"

键盘

于 2012-06-03T00:04:33.660 回答
2

参考我上面的评论:

#(?:[{](.*?)[}])(.*?)(?:[{]/\1[}])#

使用反向引用来保持标签相等。此外,我使用非捕获括号将无用的组排除在外:$1将是标签名称,$2将是标签内容。

请注意,如果您的标签可以嵌套,则必须多次应用替换。

于 2012-06-03T00:01:15.637 回答