2014-11-01 12 views
1

我將有一個由存儲在PHP變量中的HTML代碼組成的字符串(一行)。該字符串來自通常在標籤之間具有新行和空白的HTML頁面。我們可以有新的生產線(一個或多個)和,或空格這樣exemle:正則表達式PHP查找和替換空白區域,或HTML標籤之間的新行

<h1>tag1</h> 
     <p>Between h ad p we have \s and \n</p> 

執行後一個正則表達式和的preg_replace我想有這樣的:

<h1>tag1</h><p>Between h ad p we have \s and \n</p> 

我已經試過這正則表達式,但它不workig。

$str=<<<EOF 
<h1>tag1</h> 
      <p>Between h ad p we have \s and \n</p> 

EOF; 


$string = trim(preg_replace('/(>\s+<)|(>\n+<)/', ' ', $str)); 

在這裏你可以找到整個代碼http://www.phpliveregex.com/p/7Pn

+0

的可能重複的[HTML縮小?](http://stackoverflow.com/ questions/728260/html-minification) – 2014-11-01 06:12:21

+0

嗨,Glavic,它可以工作,但我需要幕後的正則表達式。這個網站做的工作http://kangax.github.io/html-minifier/ – zwitterion 2014-11-01 06:20:51

+0

看到頁腳:*源和bugtracker託管在Github上。* – 2014-11-01 06:26:13

回答

4

有兩個問題

(preg_replace('/(>\s+<)|(>\n+<)/', ' ', $str) 
  • \s已經包括\n故無必要提供另一交替。

  • (>\s+<)這裏的正則表達式消耗兩個angulars <>因此,空間替換將刪除一切,包括angulars

輸出是

<h1>tag1</hp>Between h ad p we have \s and \n</p> 

這是不是你想要的

何w至糾正

使用正則表達式(>\s+<)和替換字符串作爲><給輸出

<h1>tag1</h><p>Between h ad p we have \s and \n</p> 

例如http://regex101.com/r/dI1cP2/2

你也可以使用環視來解決問題

的正則表達式將be

(?<=>)\s+(?=<)

和替換的字符串將是空字符串

說明

(?<=>)斷言\s>

\s+ presceded匹配一個或多個空間

(?=<)斷言\s後跟通過<

這裏的外表變通不會消耗任何角形托架如前面的正則表達式

看到http://regex101.com/r/dI1cP2/3例如

+0

完美!謝謝。 – zwitterion 2014-11-01 12:56:33

+0

嗨nu11p01n73R,事實上在正則表達式之外有一個字母「g」(修飾符),它會產生變化。所以我們應該像這樣在php代碼中使用'preg_replace(「/(> \ s + <)/g", "><」,$ str);'? – zwitterion 2014-11-01 13:08:48

+0

在php中沒有「g」修飾符http://php.net/manual/en /reference.pcre.pattern.modifiers.php – zwitterion 2014-11-01 13:14:54

0

你可以用這個嘗試:

echo preg_replace("/(?=\>\s+\n|\n)+(\s+)/", "", $str); 
+0

如果他們使用Windows服務器? – ArtisticPhoenix 2014-11-01 06:19:03

+0

@ArtisiticPhoenix,對不起,我還沒有使用Windows Server的經驗,你可以精心策劃它不適用於Windows服務器嗎? – 2014-11-01 06:20:47

+0

很多時候,窗口將使用「\ r \ n」作爲行尾。所以只是「\ n」可能不匹配。 – ArtisticPhoenix 2014-11-01 06:24:16

相關問題