PHP preg_replace分段错误/删除 tr 元素中的换行符 ()



谁能告诉我为什么这个正则表达式会导致php分割错误?

$text = preg_replace('~[srn]+(?=(?:(?!<tr).)*</tr>)~is', ' ', $text);

我需要删除tr元素中的换行符(nr)。也许有一个更好的正则表达式来做到这一点,或者也许有一个非正则表达式解决方案?

更新:

我只需要删除元素内部tr换行符。其他换行符应保持不变。

UPDATE2:

我不是在用正则表达式解析 HTML。我正在收到电子邮件正文(它可以是没有表格的巨大 html,它已经可以是纯文本),删除 tr 中的换行符,剥离 HTML 标签并使用纯文本。

UPDATE3:

请不要回答"使用解析器"或反对票。我认为它不太适合这种情况,如果我错了,请解释为什么我错了。我真的很感激。谢谢。

我认为preg_replace_callback()将是这项工作的最佳工具。试试这个:

$text = preg_replace_callback('#<tr.+?</tr>#is',
                              function($m){return preg_replace('/[rn]+/',' ',$m[0]);},
                              $text);

最新更新