2017-02-14 51 views
-2

我有一個HTML文件,其中多個HTML標籤出現在一行上。例如:preg_match表達式在單個HTML標籤之間放置換行符

<body class=" yui3-skin-sam controls-visible guest-site signed-out public-page site"> <a href="#main-content" id="skip-to-content">Skip to Content</a> <div id="outer-wrapper"> <div id="wrapper" class="echa-styled live container-fluid"> <div id="content-wrapper"> <a href="#main-content" id="skip-to-content">Skip to Content</a> <header id="banner" role="banner">

我有一個PHP應用程序,它從這個文件中讀取,並將它寫(一些處理後除去各種標籤)到另一個文件。但是,在輸出文件上,我還希望在每個HTML標記之間創建新行"\n"。所期望的輸出上面的例子是這樣的 - 唯一的區別是,每個標籤的開口部上的新行開始在輸出文件:

<body class=" yui3-skin-sam controls-visible guest-site signed-out public-page site"> 
<a href="#main-content" id="skip-to-content">Skip to Content</a> 
<div id="outer-wrapper"> 
<div id="wrapper" class="echa-styled live container-fluid"> 
<div id="content-wrapper"> 
<a href="#main-content" id="skip-to-content">Skip to Content</a> 
<header id="banner" role="banner"> 

我有我已經用於剝離正則表達式一些有條件的標籤是preg_replace('/<!--(.|\s)*?-->/', '', $body);

我正在考慮修改這一讓,而不是針對有條件的標籤(<!-- -->),它的目標是<>。然後,我將與preg_match

一起使用它但我不確定如何構造適當的preg_match條件,特別是在添加新行字符的方式/位置方面。我想第一個參數將是'/<(.|\s)*?>/'來定位任何開啓/關閉HTML標籤。

請有人建議如何做到這一點,或者如果有這個問題的替代解決方案?

+0

我找到了同樣的解決方案 –

+1

'str_replace('><' , '> \ n <',$ html)',假設標籤之間有空格,就像你的例子。 – Michel

回答

1

(<([^> ]+)[^>]*>)(?![^<>]*<\/\2>)

替換$1\n

<tag properties="values"></tag> =><tag properties="values"></tag>

<tag properties="values">content</tag> =><tag properties="values">content</tag>

<tag properties="values"><nested-tag>content</nested-tag></tag> =><tag properties="values">\n<nested-tag>content</nested-tag\n</tag>

+0

謝謝。你可以編輯或評論如何構建'preg_replace' PHP函數來使用它?假設標記(來自輸入文件的1行)在名爲'$ body'的變量var中 – Andy

+1

我不知道PHP。假設你只是將代碼插入函數中,就像你所做的一樣:'preg_replace('/(<([^>)+)[^>] *>)(?![^ <>] * <\/\2>)/',「$ 1 \ n」 ,$ body);' – Whothehellisthat

0

不知道爲什麼這篇文章被低估,因爲它是一個完全合法的編程問題。

無論如何,我發現我自己的解決方案這是用這樣的:

$body = preg_replace('/>/', ">\n", $body);

沒有如果這是正確的,但我接受它作爲答案的想法,因爲沒有其他人幫助它做我想要的。

+0

這將不允許'文本'保持在同一行。解決方案傳入... – Whothehellisthat

0

試試這個代碼

$body = '<body class=" yui3-skin-sam controls-visible guest-site signed-out public-page site"> <a href="#main-content" id="skip-to-content">Skip to Content</a> <div id="outer-wrapper"> <div id="wrapper" class="echa-styled live container-fluid"> <div id="content-wrapper"> <a href="#main-content" id="skip-to-content">Skip to Content</a> <header id="banner" role="banner">'; 

$body = preg_replace("/>/", "> \n", trim($body)); 

echo $body; 

/* output 

<body class=" yui3-skin-sam controls-visible guest-site signed-out public-page site"> 
<a href="#main-content" id="skip-to-content"> 
Skip to Content</a> 
<div id="outer-wrapper"> 
<div id="wrapper" class="echa-styled live container-fluid"> 
<div id="content-wrapper"> 
<a href="#main-content" id="skip-to-content"> 
Skip to Content</a> 
<header id="banner" role="banner"> 


*/ 
0

我會做簡單:

$html = preg_replace('/>\s*</', ">\n<", $html); 
相關問題