有谁能告诉我为什么这个正则表达式会导致php分段错误?
$text = preg_replace('~[\s\r\n]+(?=(?:(?!<tr).)*<\/tr>)~is', ' ', $text);
我需要删除\n\r
元素中的换行符(tr
)。也许有更好的正则表达式,或者可能有非正则表达式解决方案?
更新:
我只需要在tr
元素中删除换行符。其他换行符应该不受影响。
UPDATE2:
我没有用正则表达式解析HTML。我正在收到电子邮件正文(它可以是没有表格的大型html,它可以是纯文本),删除tr中的换行符,剥离HTML标记和使用纯文本。
UPDATE3:
请不要回答“使用解析器”或downvote。我不认为它很适合这种情况,如果我错了,请解释我为什么错。我真的很赞成它。谢谢。
答案 0 :(得分:2)
我认为preg_replace_callback()将是这项工作的最佳工具。试试这个:
$text = preg_replace_callback('#<tr.+?</tr>#is',
function($m){return preg_replace('/[\r\n]+/',' ',$m[0]);},
$text);