我有以下字符串例如:
[noreplace1]<noreplace2>noreplace3[<replace1><replace2>noreplace4<replace3>noreplace5]<noreplace6>noreplace7"
我需要替换&lt;&gt;之间的所有内容它包含在方括号内 - 与方括号本身不匹配。
我正在使用preg_replace并尝试过以下操作:
preg_replace('/(?<=\[\<)(\<(.*?)*\>)*(?=\])/', '', $str);
但这并没有给出预期的结果。
预期输出应为:[noreplace1] noreplace3 [noreplace4noreplace5] noreplace7
有什么建议吗?
答案 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);