【问题标题】:How to remove a custom tag and content between in PHP?如何在 PHP 中删除自定义标签和内容?
【发布时间】:2011-08-26 17:31:00
【问题描述】:

如果我在字符串中有这个标签:
[phpbay]{keyword}, 30, "", "", "", "", "", "", "", "", "", "", "", "", "2", "", "", ""[/phpbay]
我可以删除它和标签之间的内容吗?也许使用正则表达式?谢谢!

【问题讨论】:

  • 你想得到哪一部分?
  • str_replace($string, "", $string);?
  • 是的,您可以使用正则表达式将其删除。 :)
  • 我正在尝试获取 [phpbay] [/phpbay] 标签中的所有内容。该字符串还将包含其他内容,因此我只想从中删除该标签。 :)
  • 标签是什么? [phpbay] 还是 {keyword}?两者都有?

标签: php regex tags


【解决方案1】:
preg_replace('~\[phpbay\](.+?)\[/phpbay\]~','',$string);

【讨论】:

    【解决方案2】:
    $string = "[phpbay]blah blah blah [/phpbay]";
    $stripped_string = preg_replace('~\[\/?phpbay\]~', '', $string);
    

    如果我没看错你的问题,并且只希望保留“blah blah blah”部分。

    【讨论】:

      【解决方案3】:

      这个正则表达式将为您提供这两个标签之间的所有内容:

      \[phpbay](.+)\[/phpbay]
      

      【讨论】:

      • 这将删除从第一个 [phpbay] 到 最后一个 [/phpbay] 的所有内容,而不是第一个或匹配的。我敢打赌那是错误的。
      • @tchrist:如果您将它与preg_replace 一起使用。但是,如果您匹配捕获的组...
      【解决方案4】:

      是的,正则表达式在这里可能是可行的:

      $str = preg_replace('#\[phpbay][{\w},\s\d"]+\[/phpbay]#', "", $str);
      

      这只是从字符串中删除“标签”,如果它只包含你的例子中的字符。如果您只想删除它,如果它包含例如您的示例 30 或特定的 {keyword} 您必须使正则表达式更具体。

      另请参阅https://stackoverflow.com/questions/89718/is-there-anything-like-regexbuddy-in-the-open-source-world 了解一些可能有帮助的工具。

      【讨论】:

      • 这似乎不是正确的想法。仅仅在端点之间寻找某些字符似乎是错误的,而且您也有错误的正确端点。
      【解决方案5】:

      我个人会使用 str_replace 或 str_ireplace(不区分大小写)

      $Find = array("[phpbay]","[/phpbay]");
      $Replace = array("<b>","</b>");
      $Source = "[phpbay]Hello World[/phpbay]";
      
      
      //Couldn't get any simpler...Replace [phpbay]Content[/phpbay] with <b>Content</b>
      
      echo str_ireplace($Find,$Replace,$Source);
      

      经过试验和测试,它有效。

      希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 2012-04-11
        • 2021-10-09
        • 2013-04-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多