php preg_替换分段错误/删除tr元素中的换行符(\n)

php preg_替换分段错误/删除tr元素中的换行符(\n),php,regex,Php,Regex,有人能告诉我为什么这个正则表达式会导致php分段错误吗 $text = preg_replace('~[\s\r\n]+(?=(?:(?!<tr).)*<\/tr>)~is', ' ', $text); 我需要删除tr元素中的换行符\n\r。也许有更好的正则表达式可以做到这一点,或者有非正则表达式的解决方案 更新: 我只需要删除tr元素内部的换行符。其他换行符应保持不变 更新2: 我不是用正则表达式解析HTML。我得到的电子邮件正文,它可以是巨大的html没有表格,它可以是纯

有人能告诉我为什么这个正则表达式会导致php分段错误吗

$text = preg_replace('~[\s\r\n]+(?=(?:(?!<tr).)*<\/tr>)~is', ' ', $text);
我需要删除tr元素中的换行符\n\r。也许有更好的正则表达式可以做到这一点,或者有非正则表达式的解决方案

更新:

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

更新2:

我不是用正则表达式解析HTML。我得到的电子邮件正文,它可以是巨大的html没有表格,它可以是纯文本,删除tr的换行符,剥离html标记和使用纯文本

更新3:

请不要回答“使用解析器”或“向下投票”。我认为这不太适合这种情况,如果我错了,请解释为什么我错了。我会非常感激的。谢谢。

我认为这是做这项工作的最佳工具。试试这个:

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

也许有非正则表达式的解决方案?当然,使用HTML解析器。不要使用正则表达式解析HTML。@pregty用于sugestion,但我正在解析电子邮件,所以lynx不是option@DoorknobofSnow我不使用正则表达式来解析HTML。我用它来删除标记中的换行符,然后剥离html标记并使用纯文本。seg错误可能是由堆栈溢出引起的,我猜这是由于?!