[英]Regex PHP to find and replace white space and,or new line between HTML tags
我將有一個由HTML代碼組成的字符串(一行),該字符串將存儲在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
有兩個問題
(preg_replace('/(>\s+<)|(>\n+<)/', ' ', $str)
\\s
已經包含\\n
因此無需提供其他替換。
(>\\s+<)
在這里,正則表達式同時消耗角度<
和>
因此用空格代替 將刪除所有內容,包括角度
輸出是
<h1>tag1</hp>Between h ad p we have \s and \n</p>
那不是你想要的
如何改正
使用正則表達式(>\\s+<)
和替換字符串作為><
輸出顯示為
<h1>tag1</h><p>Between h ad p we have \s and \n</p>
例如http://regex101.com/r/dI1cP2/2
您也可以使用環視解決問題
正則表達式將是
(?<=>)\\s+(?=<)
並替換字符串將為空字符串
說明
(?<=>)
斷言\\s
以>
開頭
\\s+
匹配一個或多個空格
(?=<)
斷言\\s
后跟<
在這里環顧四周不會像以前的正則表達式那樣消耗任何尖括號
您可以嘗試以下操作:
echo preg_replace("/(?=\>\s+\n|\n)+(\s+)/", "", $str);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.