你好嗎?我會直指點。PHP preg_replace崩潰。僅適用於正則表達式大師
我使用遞歸正則表達式基本上去除個體或嵌套< BLOCKQUOTE>標記。我只需要刪除純文本,嵌套或不嵌套,並留下任何超出這些的文字。
此正則表達式不正是我想要的工作(注意,使用先行和遞歸)
$comment=preg_replace('#<blockquote>((?!(</?blockquote>)).|(?R))*</blockquote>#s',"",$comment);
,但它有一個很大的問題:當$評論是大(超過3500個字符) ,Apache崩潰(我假設分段錯誤)。
我需要一個解決問題的辦法,要麼但解決崩潰,使用更好的正則表達式或自定義函數,將做的工作也是如此。
如果您只是想知道如何去除嵌套的特定標籤,歡迎他們。
謝謝你提前
請不要使用正則表達式解析HTML,因爲它會[驅動你į̷̷͚̤̤̖̦͍͗̒̈̅̄n̨͖͓̹͍͎͔͈̝͐ͪ͛̄͛ṣ̷̵̞̦ͤ̅̉̋ͪ͑͛ͥ͜a̷̘͖̮͔͎͛̇̏̒͆̆͘n͇͔̤̼͙̩͖̭ͤ͋̉͌͟eͥ͒͆ͧͨ̽͞҉̹͍̳̻͢](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454 #1732454)。改爲使用[HTML解析器](http://stackoverflow.com/questions/292926/robust-mature-html-parser-for-php)。 – 2012-08-10 23:29:07
Segfault = [堆棧溢出](http://en.wikipedia.org/wiki/Stack_overflow)=可能是無限遞歸。你確定它只是字符串的大小,還是它導致問題的內容?儘管@Truth講述了*真相*(哈!) - HTML解析器對於這項工作來說是一個更好的工具。如果你必須堅持使用正則表達式,並且你確定表達式符合你的需求,那就試着在它上面放一個「S」(研究)標誌,我已經看到它修復了許多罪惡。 – DaveRandom 2012-08-11 00:00:11
@Truth恭喜,你似乎已經找到了一種方式來打破SO CSS的評論。 Skillz ... – DaveRandom 2012-08-11 00:01:49