簡體   English   中英

正則表達式PHP,用於查找和替換空格和/或HTML標記之間的換行

[英]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后跟<

在這里環顧四周不會像以前的正則表達式那樣消耗任何尖括號

例如,請參見http://regex101.com/r/dI1cP2/3

您可以嘗試以下操作:

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

試試看,看演示。用empty string替換

http://regex101.com/r/jI8lV7/1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM