我有一个HTML文件,其中多个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)
(<([^> ]+)[^>]*>)(?![^<>]*<\/\2>)
替换为$1\n
。
<tag properties="values"></tag>
=&gt; <tag properties="values"></tag>
<tag properties="values">content</tag>
=&gt; <tag properties="values">content</tag>
<tag properties="values"><nested-tag>content</nested-tag></tag>
=&gt; <tag properties="values">\n<nested-tag>content</nested-tag\n</tag>
答案 1 :(得分:0)
不确定为什么这篇文章被低估了,因为它是一个完全合法的编程问题。
无论如何,我找到了自己的解决方案就是使用它:
$body = preg_replace('/>/', ">\n", $body);
不知道这是否正确,但我接受它作为答案,因为没有其他人帮助过它,它做了我想做的事。
答案 2 :(得分: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">
*/
答案 3 :(得分:0)
我做的很简单:
$html = preg_replace('/>\s*</', ">\n<", $html);