我有一个类似这样的字符串:
$str="
<code>
lol
test
</code>
test";
我想修剪标签内的文字,以便最终得到:
$str="
<code>lol
test</code>
test";
有没有办法可以把它拆分成3个数组,所以中间文本上有一个简单的trim()?
非常感谢答案 0 :(得分:1)
这应该这样做。它的作用是查找<tag>
后跟任意数量的空格和修剪,直到找到另一个非空格字符。然后它会在结束</tag>
之前删除任意数量的空格。
preg_replace(array(
'/(<[a-zA-Z]+>)[[:space:]]*([^[:space:]])/m',
'/[[:space:]]*(<\/[a-zA-Z]+>)/m',
), array(
'\1\2',
'\1',
), $str);
查看实际操作:http://codepad.org/Stmd32QL
修改强>
这只会查找<code>
个标签。
preg_replace(array(
'/(<code>)[[:space:]]*([^[:space:]])/mi',
'/[[:space:]]*(<\/code>)/mi',
), array(
'\1\2',
'\1',
), $str);
答案 1 :(得分:1)
正则表达式不是正确的解决方案,如果你想获得最好的结果,你应该使用html解析库。但是,如果你对使用正则表达式解析html的问题没问题;这应该这样做:
<?php
$string = "
<code>
lol
test
</code>
test";
$pattern = '/(<([a-z]+)>)\s*(.+)\s*(<\/\2>)/ms';
$new_string = preg_replace_callback($pattern, function ($m) {
return $m[1].trim($m[3]).$m[4];
}, $string);
var_dump($new_string);
结果:
$ php test.php
string(35) "
<code>lol
test</code>
test"
请注意,html标记模式在此处为您的示例进行了简化,如果您需要支持诸如<coDe style="color: red;">