2014-01-09 47 views
-1

誰能告訴我爲什麼這個正則表達式導致php分段錯誤?php preg_replace分段錯誤/刪除tr元素中的換行符( n)

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

我需要在tr元件除去換行符(\n\r)。也許有更好的正則表達式來做到這一點,或者有一個非正則表達式的解決方案?

UPDATE:

我需要刪除換行符僅內部tr元素。其他換行符應該保持不變。

UPDATE2:

我不是用正則表達式解析HTML。我正在收到電子郵件正文(它可以是沒有表格的巨大html,它可以是純文本),刪除tr中的換行符,剝離HTML標籤並使用純文本。

UPDATE3:

請不要回答 「使用解析器」 或者downvote。我認爲它不適合這種情況,如果我錯了,請解釋我爲什麼錯了。我真的會讚賞它。謝謝。

+0

'也許有非正則表達式的解決方案?'當然,使用HTML解析器。 – Toto

+3

[Obligatory ...](http://stackoverflow.com/a/1732454/1223693)do ** not **使用正則表達式來解析HTML。 – Doorknob

+0

@pregmatch ty for sugestion,但我解析電子郵件,所以lynx不是一個選項 –

回答

2

我認爲preg_replace_callback()將是這項工作的最佳工具。試試這個:

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