正则表达式匹配<>之间的所有内容它位于方括号之间

时间:2014-11-07 08:12:08

标签: php regex preg-replace

我有以下字符串例如:

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

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

我正在使用preg_replace并尝试过以下操作:

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

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

预期输出应为:[noreplace1] noreplace3 [noreplace4noreplace5] noreplace7

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

试试正则表达式

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

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

代码可以是

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

如何匹配

  • <[^>]*>匹配<>

  • 之间的任何内容
  • (?=[^\[\]]*\])展望未来。断言正则表达式后跟

    • [^\[\]]*除了[]

    • 之外的其他内容
    • \]后面跟着]

答案 1 :(得分:0)

  

预期输出应为:   [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);