<ul>
<li><a href="#">Foo</a></li>
<li><a href="#">Foo</a></li>
<li><a href="#">Foo</a></li>
</ul>
<ul>
<li><a href="#">Bar</a></li>
<li><a href="#">Bar</a></li>
<li><a href="#">Bar</a></li>
</ul>
如何在第一个空白行之前获取任何内容?
注意:内容的第一部分和第二部分并不总是以ul开头。
答案 0 :(得分:4)
preg_match(
'/\A # Start of string
.*? # Match any number of characters (as few as possible)
(?= # until it is possible to match...
\s* # trailing whitespace, including a linebreak
^ # Start of line
\s* # optional whitespace
$ # End of line
) # (End of lookahead assertion)/smx',
$subject, $regs);
$result = $regs[0];
假设您将除空格之外的任何行都计为空行。如果没有,请删除“可选空格”行。
答案 1 :(得分:0)
在如下所示的示例字符串中:
<ul>
<li><a href="#">Foo</a></li>
<li><a href="#">Foo</a></li>
<li><a href="#">Foo</a></li>
</ul>
<ul>
<li><a href="#">Bar</a></li>
<li><a href="#">Bar</a></li>
<li><a href="#">Bar</a></li>
</ul>
<ul>
<li><a href="#">Bum</a></li>
<li><a href="#">Bum</a></li>
<li><a href="#">Bum</a></li>
</ul>
<ul>
<li><a href="#">Barf</a></li>
<li><a href="#">Barf</a></li>
<li><a href="#">Barf</a></li>
</ul>
Tim 的 preg_match()
模式使用惰性量词和前瞻需要 432 步才能完成。它还依赖于字符串中实际存在双换行符序列的事实(如果双换行符不存在则匹配失败)。
我想我会推荐一种不同的技术。使用更简单(贪婪)的模式在字符串上使用 preg_replace()
。
代码:(Demo)
preg_replace('/\R{2}.*/s', '', $html)
它不仅返回所需的输出,无论字符串中是否出现双换行符序列,该模式只需 7 个步骤。这就是我将在我的项目中使用的内容。
\R
匹配不同操作系统上的换行符序列。
s
s 模式修饰符告诉正则表达式引擎在与通配符 .
匹配时包含换行符。