2016-03-01 50 views
0

我想從一個來自html語句的字符串中刪除空格或新行。 例子:讓我們後續的字符串正則表達式 - 如何刪除HTML代碼中的空白和新行?

<ul class="list-group sidebar-nav-v1 margin-bottom-40" id="menuHomeUserPrivate">  
<li class="list-group-item active"> 
    <a id="to_ProfileOverall" class="privateMenuLinkJS"><i class="fa fa-bar-chart-o"></i> Overall</a> 
</li> 
<li class="list-group-item list-toggle"> 
    <a data-toggle="collapse" data-parent="#menuHomeUserPrivate" href="#collapse-MoneyManage" ><i class="fa fa-money"></i> Invoice</a> 
    <ul id="collapse-MoneyManage" class="collapse"> 
     <li><a id="to_MoneyManagerFaturamentoInsert" class="privateMenuLinkJS"><i class="fa fa-level-down"></i> Big Invoice </a></li> 
     <li><a id="to_MoneyManagerFaturamentoGerir" class="privateMenuLinkJS"><i class="fa fa-cogs"></i> Big big big 

Invoice 2 </a></li> 
    </ul> 
</li> 
</ul> 

這是期望的結果:

<ul class="list-group sidebar-nav-v1 margin-bottom-40" id="menuHomeUserPrivate"><li class="list-group-item active"><a id="to_ProfileOverall" class="privateMenuLinkJS"><i class="fa fa-bar-chart-o"></i>Overall</a></li><li class="list-group-item list-toggle"><a data-toggle="collapse" data-parent="#menuHomeUserPrivate" href="#collapse-MoneyManage" ><i class="fa fa-money"></i> Invoice</a><ul id="collapse-MoneyManage" class="collapse"><li><a id="to_MoneyManagerFaturamentoInsert" class="privateMenuLinkJS"><i class="fa fa-level-down"></i>Big Invoice</a></li><li><a id="to_MoneyManagerFaturamentoGerir" class="privateMenuLinkJS"><i class="fa fa-cogs"></i>Big big big Invoice 2</a></li></ul></li></ul> 

正如你可以看到:

  1. 只有1號線,沒有枝條空格或之間的新線路「> <」,如果它們之間沒有字符串。
  2. 我想修剪「> <」之間的字符串,如果有的話。例如:</i> Big Invoice </a>變成了</i>Big Invoice</a>
  3. 最後

    </i> Big big big
    Invoice 2 </a></li>

成爲</i>Big big big Invoice 2</a></li>,在句子和修剪的中間沒有新的生產線。

到目前爲止,我實現了第一步。這是regex我用(>\s+<)但我不知道如何實現第2步和第3步。可能嗎?任何想法?


更新: 亞當的帖子後,這最終代碼:

//把你的HTML代碼在這裏。不要用雙引號「裏面,而是使用單。

$str =<<<eof 

     your dynamic HTML here. 

eof; 

$re = "/(?:\\s*([<>])\\s*|(\\s)\\s*)/im"; 
$subst = "$1$2"; 
$result = preg_replace($re, $subst, $str); 

//If you want to use JSON 
$arrToJSON = array(
    "dataPHPtoJs"=>"yourData", 
    "htmlDyn"=>"$result"  
    ); 
$resultJSON= json_encode(array($arrToJSON)); 

此HTML字符串是乾淨的。所以,你可以用它低谷AJAX,JSON,裏面的javascript,這將作品。

我我。我使用的是JavaScript代碼,沒有AJAX,JSON沒有內側箱

var htmlDyn="<?php echo $result; ?>"; 
//Do what you want to do with. 
$('.someElementClass').append(htmlDyn); 
+0

什麼局域網你使用的是什麼標準? – Shafizadeh

+1

[你不能用正則表達式解析任意的HTML](http://stackoverflow.com/a/1732454/222364)。您的代碼可能*錯誤地*將<">'摺疊爲'<">'。你需要爲你正在使用的任何語言找到一個合適的HTML解析器。有可能已經做了你想要的東西,稱爲* HTML Minifier *。 (而且我的示例似乎也在渲染空間......第一個空間應該有5個空格) –

回答

0

一些XML轉換,如果你好嗎?
以下片段位於PHP中,但也可以輕鬆轉換爲與Python一起使用。

<?php 
$string = <<<EOF 
<html> 
<ul class="list-group sidebar-nav-v1 margin-bottom-40" id="menuHomeUserPrivate">  
<li class="list-group-item active"> 
    <a id="to_ProfileOverall" class="privateMenuLinkJS"><i class="fa fa-bar-chart-o"></i> Overall</a> 
</li> 
<li class="list-group-item list-toggle"> 
    <a data-toggle="collapse" data-parent="#menuHomeUserPrivate" href="#collapse-MoneyManage" ><i class="fa fa-money"></i> Invoice</a> 
    <ul id="collapse-MoneyManage" class="collapse"> 
     <li><a id="to_MoneyManagerFaturamentoInsert" class="privateMenuLinkJS"><i class="fa fa-level-down"></i> Big Invoice </a></li> 
     <li><a id="to_MoneyManagerFaturamentoGerir" class="privateMenuLinkJS"><i class="fa fa-cogs"></i> Big big big 

Invoice 2 </a></li> 
    </ul> 
</li> 
</ul> 
</html> 
EOF; 

$xml = simplexml_load_string($string); 

$dom = new DOMDocument('1.0'); 
$dom->preserveWhiteSpace = false; 
$dom->formatOutput = false; 
$dom->loadXML($xml->asXML()); 

echo $dom->saveXML(); 
/* output: 
<html><ul class="list-group sidebar-nav-v1 margin-bottom-40" id="menuHomeUserPrivate"><li class="list-group-item active"><a id="to_ProfileOverall" class="privateMenuLinkJS"><i class="fa fa-bar-chart-o"/> Overall</a></li><li class="list-group-item list-toggle"><a data-toggle="collapse" data-parent="#menuHomeUserPrivate" href="#collapse-MoneyManage"><i class="fa fa-money"/> Invoice</a><ul id="collapse-MoneyManage" class="collapse"><li><a id="to_MoneyManagerFaturamentoInsert" class="privateMenuLinkJS"><i class="fa fa-level-down"/> Big Invoice </a></li><li><a id="to_MoneyManagerFaturamentoGerir" class="privateMenuLinkJS"><i class="fa fa-cogs"/> Big big big 

Invoice 2 </a></li></ul></li></ul></html> 
*/ 
?> 

消除所有不必要的空白,然後更安全using regular expressions on HTML tags

0

這將修剪標籤旁邊的空格,並在內容中間刪除換行符。

查找:

(?:\s*(<(?:(?:/?[\w:]+\s*/?)|(?:[\w:]+\s+(?:(?:(?:"[\S\s]*?")|(?:'[\S\s]*?'))|(?:[^>]*?))+\s*/?)|\?[\S\s]*?\?|(?:!(?:(?:DOCTYPE[\S\s]*?)|(?:\[CDATA\[[\S\s]*?\]\])|(?:--[\S\s]*?--)|(?:ATTLIST[\S\s]*?)|(?:ENTITY[\S\s]*?)|(?:ELEMENT[\S\s]*?))))>)\s*|(?:\r?\n)+) 

替換:

$1 

輸出:

<ul class="list-group sidebar-nav-v1 margin-bottom-40" id="menuHomeUserPrivate"><li class="list-group-item active"><a id="to_ProfileOverall" class="privateMenuLinkJS"><i class="fa fa-bar-chart-o"></i>Overall</a></li><li class="list-group-item list-toggle"><a data-toggle="collapse" data-parent="#menuHomeUserPrivate" href="#collapse-MoneyManage" ><i class="fa fa-money"></i>Invoice</a><ul id="collapse-MoneyManage" class="collapse"><li><a id="to_MoneyManagerFaturamentoInsert" class="privateMenuLinkJS"><i class="fa fa-level-down"></i>Big Invoice</a></li><li><a id="to_MoneyManagerFaturamentoGerir" class="privateMenuLinkJS"><i class="fa fa-cogs"></i>Big big big Invoice 2</a></li></ul></li></ul> 

基準:

Regex1: (?:\s*(<(?:(?:/?[\w:]+\s*/?)|(?:[\w:]+\s+(?:(?:(?:"[\S\s]*?")|(?:'[\S\s]*?'))|(?:[^>]*?))+\s*/?)|\?[\S\s]*?\?|(?:!(?:(?:DOCTYPE[\S\s]*?)|(?:\[CDATA\[[\S\s]*?\]\])|(?:--[\S\s]*?--)|(?:ATTLIST[\S\s]*?)|(?:ENTITY[\S\s]*?)|(?:ELEMENT[\S\s]*?))))>)\s*|(?:\r?\n)+) 
Options: <none> 
Completed iterations: 50/50  (x 1000) 
Matches found per iteration: 29 
Elapsed Time: 6.75 s, 6749.58 ms, 6749576 µs