【问题标题】:Replace img bbcode with optional width and height using regex?使用正则表达式将 img bbcode 替换为可选的宽度和高度?
【发布时间】:2014-09-14 18:32:51
【问题描述】:

我真的没有找到正确的解决方案。

我的标准 img 替换代码是:

preg_replace('~\[img](.*?)\[/img\]~s','<img src="$1" />',$text);

当然可以。但是如果设置了宽度和高度,我试图替换 bbcode。 但那是可选的,所以如果只设置 1 个维度或什么都不设置,它也应该工作。

bbcode 看起来像:[img=12x12]图片链接[/img]

所以 bbcode 应该是这样的:

 preg_replace('~\[img=(.*?)x(.*?)\](.*?)\[/img\]~s','<img width="$1" height="$2" src="$3" />',$text);

我想我弄错了。 Anybidy知道如何解决这个问题吗?

【问题讨论】:

    标签: php regex bbcode


    【解决方案1】:

    试试这个正则表达式:

    preg_replace('~\[img=?(\d+)?x?(\d+)?\](.*?)\[/img\]~s','<img width="$1" height="$2" src="$3" />',$text);
    

    按照您的编码方式,它无法匹配您想要的所有 3 个案例:[img][img=NN][img=NNxNN]。只有在提供两个维度的情况下才会匹配。

    【讨论】:

      【解决方案2】:

      您的正则表达式绝对可以工作。我会使用\d+,但它可以确保值存在并且是数字类型:

      ~\[img=(\d+)x(\d+)\](.*?)\[/img\]~s
      

      您的代码遇到了什么错误,或者更确切地说,您希望匹配什么字符串但您不匹配?

      【讨论】:

      • @user3904923 这对您有帮助还是您需要更多帮助?
      • 确实如此。谢谢你的帮助。我没有说这是错的,它只是没有按应有的方式管理它。但另一个正则表达式似乎工作。 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-27
      • 1970-01-01
      • 2011-09-14
      • 2013-12-09
      • 1970-01-01
      • 1970-01-01
      • 2021-10-03
      相关资源
      最近更新 更多