你可以帮我替换PHP吗?我不知道如何使用正则表达式设置任意数量的新行。
$var = "<p>some text</p><p>another text</p><p>more text</p>";
$search = array("</p>\s<p>");
$replace = array("</p><p>");
$var = str_replace($search,$replace,$var);
我需要的是删除两段之间的每一个新行(\n
),而不是<br/>
。
非常感谢。
答案 0 :(得分:4)
首先, str_replace()
(您在原始问题中引用)用于查找文字字符串并替换它。 preg_replace()
用于查找与正则表达式匹配的内容并替换它。
在下面的代码示例中,我使用\s+
查找一个或多个空格(新行,制表符,空格...)。 \s
is whitespace,+
修饰符表示前一个或多个。
<?php
// Test string with white space and line breaks between paragraphs
$var = "<p>some text</p> <p>another text</p>
<p>more text</p>";
// Regex - Use ! as end holders, so that you don't have to escape the
// forward slash in '</p>'. This regex looks for an end P then one or more (+)
// whitespaces, then a begin P. i refers to case insensitive search.
$search = '!</p>\s+<p>!i';
// We replace the matched regex with an end P followed by a begin P w no
// whitespace in between.
$replace = '</p><p>';
// echo to test or use '=' to store the results in a variable.
// preg_replace returns a string in this case.
echo preg_replace($search, $replace, $var);
?>
答案 1 :(得分:0)
我发现拥有巨大的HTML字符串很奇怪,然后使用一些字符串搜索并替换hack来格式化后来......
使用PHP构建HTML时,我喜欢使用数组:
$htmlArr = array();
foreach ($dataSet as $index => $data) {
$htmlArr[] = '<p>Line#'.$index.' : <span>' . $data . '</span></p>';
}
$html = implode("\n", $htmlArr);
这样,每个HTML行都有单独的$ htmlArr []值。此外,如果你需要你的HTML“漂亮的打印”,你可以简单地使用某种方法,通过在每个数组元素的开头添加空格取决于索姆规则集来缩进HTML。例如,如果我们有:
$htmlArr = array(
'<ol>',
'<li>Item 1</li>',
'<li><a href="#">Item 2</a></li>',
'<li>Item 3</li>',
'</ol>'
);
然后格式化函数算法(非常简单,考虑到HTML构造得很好):
$indent = 0; // initial indent
foreach & $value in $array
$open = count how many opened elements
$closed = count how many closed elements
$value = str_repeat(' ', $indent * TAB_SPACE) . $value;
$indent += $open - $closed; // next line's indent
end foreach
return $array
然后implode("\n", $array)
用于改进的HTML
** 更新 **
在Felix Kling编辑问题之后,我意识到这与这个问题无关。对不起:)谢谢澄清。