我在PHP中使用strip_tags
来回显数据时删除HTML标记。
我的字符串如下:
<br>
<br>
<br>
<br>
<br>
Test 1, Test2<br>
Test 3,<br>
<br>
<br>
<br>
<br>
<br>
Test 4<br>
Test 5<br>
<br>
Test 6 test 7
如何删除留下大空白的<br>
标记,但将<br>
标记保留在行间距之间(如Test 1, Test2<br>Test3
之间的标记)?
然后删除:
<br>
<br>
<br>
<br>
<br>
所以字符串最终看起来像:
Test 1, Test2<br>
Test 3,<br>
Test 4<br>
Test 5<br>
<br>
Test 6 test 7
答案 0 :(得分:1)
通过两个步骤完成此操作可能更简洁:
// remove <br> tags
$text = preg_replace('#^(<br[\\s]*(>|\/>)\s*){2,}$#im', '', $text);
// remove empty lines - from http://stackoverflow.com/a/709684/
$text = preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", PHP_EOL, $text);
说明 - #^(<br\s*(>|\/>)\s*){2,}$#im
^
- 行锚的开头(
- 第一个捕获组
<br
- 字面字符<
,后跟b
,后跟r
\s*
- 任何空白字符,零次或多次(>|\/>)
- 替换 - 匹配<br>
和<br/>
\s*
- 后跟可选的空格)
- 第一个捕获组的结束{2,}
- 匹配前一组,2次或更多次i
- 匹配两种情况m
- 使模式匹配线分开输出:
Test 1, Test2<br>
Test 3,<br>Test 4<br>
Test 5<br>
<br>
Test 6 test 7