【问题标题】:Regular expression to match all between <> which falls between square brackets正则表达式匹配所有 <> 之间的方括号之间
【发布时间】:2014-11-07 08:12:08
【问题描述】:

例如,我有以下字符串:

[noreplace1]<noreplace2>noreplace3[<replace1><replace2>noreplace4<replace3>noreplace5]<noreplace6>noreplace7"

我需要替换 之间包含在方括号内的所有内容 - 与方括号本身不匹配。

我正在使用 preg_replace 并尝试了以下方法:

preg_replace('/(?<=\[\<)(\<(.*?)*\>)*(?=\])/', '', $str);

但这并没有给出预期的结果。

预期的输出应该是:[noreplace1]noreplace3[noreplace4noreplace5]noreplace7

有什么建议吗?

【问题讨论】:

  • 你期望什么输出?
  • 我希望这样:[noreplace1]noreplace3[noreplace4noreplace5]noreplace7"

标签: php regex preg-replace


【解决方案1】:

试试正则表达式

<[^>]*>(?=[^\[\]]*\])

例如:http://regex101.com/r/sP8nR9/3

代码可以

preg_replace('/<[^>]*>(?=[^\[\]]*\])/', '', $str);

如何匹配

  • &lt;[^&gt;]*&gt; 匹配 &lt;&gt; 之间的任何内容

  • (?=[^\[\]]*\]) 前瞻断言。断言正则表达式后跟

    • [^\[\]]* 只不过是[]

    • \] 后跟]

【讨论】:

    【解决方案2】:

    预期的输出应该是: [noreplace1]noreplace3[noreplace4noreplace5]noreplace7

    对于这个输出,你可以使用strip_tags,这样更简单

    <?php
    $content="[noreplace1]<noreplace2>noreplace3[<replace1><replace2>noreplace4<replace3>noreplace5]<noreplace6>noreplace7";
    $foo = strip_tags($content);
    var_dump($foo);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-02
      • 2020-01-20
      • 2011-09-06
      • 1970-01-01
      • 1970-01-01
      • 2017-01-08
      • 1970-01-01
      相关资源
      最近更新 更多