【问题标题】:PHP replace everything between curly brackets?PHP替换大括号之间的所有内容?
【发布时间】:2011-11-30 05:59:18
【问题描述】:

我对 preg 很烂,我永远学不会 :( 这应该不难,我可以请一个代码示例来替换大括号之间的所有内容,包括空格,所有内容吗?喜欢:

$string = preg_replace('{.*?}#si', '', $string); 

还是什么?

【问题讨论】:

    标签: php preg-replace


    【解决方案1】:

    您缺少最初的 # 分隔符:

    '#\{.*?\}#s'
    

    在线查看:ideone

    其他几点:

    • 这里不需要i 修饰符,因为模式中没有任何字母。
    • 最好在正则表达式中转义 {} 以避免与它们用作量词的混淆,但在这种情况下并非绝对必要。

    【讨论】:

    • 感谢您的回复,但它所做的只是删除了第一个括号,括号之间的所有内容都保留了。
    • @John Jenkins:作为一个疯狂的猜测,我想你忘记了\},否则你在最后的# 之前有一个额外的空格或其他字符。如果您需要更具体的帮助,请发布您尝试过的代码。
    • 我刚刚复制并粘贴了您给我的代码。我现在正在尝试不同的东西,尝试慢慢修改其他代码: $string = preg_replace('#([{.*?}])*?([{.*?}])#e', " ('\t$2')", $string);它在每个句点和问号之后添加一个标签,但我希望它对所有括号之间的所有内容都这样做。
    • @John Jenkins:听起来你的复制+粘贴键坏了,因为当我复制+粘贴时它工作正常...查看我的答案的更新:我添加了一个指向 ideone 的链接显示它工作正常。我建议您发布您尝试过的确切代码,否则我只能猜测您做错了什么......
    • $string = preg_replace('#\{.*?\}#s', "", $string);适合你吗?它对我所做的只是删除第一个括号。基本上我试图缩进 if () { $blah = 1; } if、while 和 foreach 语句。
    【解决方案2】:

    在阅读了您的其他问题后,您似乎想使用它来美化您的代码。虽然许多编辑器都为单个文件内置了此功能,但我想您想将此功能应用于一堆文件。如果是这种情况,请参阅https://github.com/clbustos/PHP_Beautifier

    由于 cmets 进行编辑: 老实说,您不会想使用正则表达式。使用php tokenizer

    【讨论】:

    • 我正在尝试制作自己的美化器
    • @JohnJenkins:为了钱请别人给你写?
    • 我完全免费提供它,没有广告我将主要自己使用它
    猜你喜欢
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多