我試圖在每個分號後插入一個空格,除非分號是HTML實體的一部分。這裏的例子很簡短,但我的字符串可能很長,有幾個分號(或沒有)。在分號後插入空格,除非它是HTML實體的一部分
Coca‑Cola => Coca‑Cola (‑ is a non-breaking hyphen)
Beverage;Food;Music => Beverage; Food; Music
我發現下面的正則表達式確實爲短字符串的伎倆:
<?php
$a[] = 'Coca‑Cola';
$a[] = 'Beverage;Food;Music';
$regexp = '/(?:&#?\w+;|[^;])+/';
foreach ($a as $str) {
echo ltrim(preg_replace($regexp, ' $0', $str)).'<br>';
}
?>
然而,如果字符串是有點大,上面的preg_replace
實際上崩潰我的Apache服務器(在連接)將以下代碼添加到上面的示例代碼中:
$a[] = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. '.
'In blandit metus arcu. Fusce eu orci nulla, in interdum risus. '.
'Maecenas ut velit turpis, eu pretium libero. Integer molestie '.
'faucibus magna sagittis posuere. Morbi volutpat luctus turpis, '.
'in pretium augue pellentesque quis. Cras tempor, sem suscipit '.
'dapibus lacinia, dolor sapien ultrices est, eget laoreet nibh '.
'ligula at massa. Cum sociis natoque penatibus et magnis dis '.
'parturient montes, nascetur ridiculus mus. Phasellus nulla '.
'dolor, placerat non sem. Proin tempor tempus erat, facilisis '.
'euismod lectus pharetra vel. Etiam faucibus, lectus a '.
'scelerisque dignissim, odio turpis commodo massa, vitae '.
'tincidunt ante sapien non neque. Proin eleifend, lacus et '.
'luctus pellentesque;odio felis.';
上面的代碼(帶有大字符串)崩潰的Apache但工程,如果我在命令行上運行PHP。
在我的程序的其他地方,我使用preg_replace
沒有問題的更大的字符串,所以我猜它的正則表達式淹沒PHP/Apache。
那麼,有沒有辦法'修復'的正則表達式,所以它在Apache的大字符串上工作,或者有另一種更安全的方式來做到這一點?
我在Windows XP SP3上使用PHP 5.2.17和Apache 2.0.64,如果有任何幫助的話。 (不幸的是,升級PHP或Apache是不是現在的選項。)
這很好用!由於瀏覽器通常不會顯示它們,所以不必介意額外的空格(最終編輯),但是一個很好的接觸。 爲什麼我的RegEx頭痛的解決方案總是看起來那麼簡單?...-) :-) – Goozak 2012-04-05 11:47:43
@Goozak喜歡很多東西,你必須知道工具的所有怪癖和能力,然後才能以優雅的方式使用它 - 某人使用錘子或許能夠用一次打擊(我已經看到完成了,但更多的時候打了一次龍頭),或者他們可能會以未完成的工作和一個真正受傷的拇指結束。他們也許能夠完成這項工作而不會給任何人留下深刻的印象 - 這一切取決於你想投入多少努力和練習,並在一定程度上你需要幫助你學習:) – 2012-04-05 17:17:23
試圖抓住HTML像-這樣的實體(你的#是爲了這個,對不對?) - 這個#有問題:http://rubular.com/r/yM0shbE9i2不應該抓住最後三分之一,對吧? – Joan 2015-09-17 16:13:30