我有这种字符串:
Blabla1 Blaabla2<br /> Blaabla3 Blaabla4
我试图在" "
或"<br />"
与preg_split
之间爆炸每个单词。
我的观点:
Blabla1
Blabla2 <br />
Blaabla3
Blaabla4
我尝试使用此正则表达式(?:(<br\s))|\s
,但未设法排除"/>"
谢谢!
答案 0 :(得分:3)
你可以这样做的一种方式:
$str = 'Blabla1 Blaabla2<br /> Blaabla3 Blaabla4';
$results = preg_split('~(?:<br[^>]*>\s*\K|\s+)~', $str);
print_r($results);
<强>输出强>
Array
(
[0] => Blabla1
[1] => Blaabla2<br />
[2] => Blaabla3
[3] => Blaabla4
)
答案 1 :(得分:1)
如果没有更多HTML,可以使用RegEx。 Otherwise there are many better ways。
使用<br(\s\/)?>\K|\s
:
$matches = preg_split('/<br(\s\/)?>\K|\s/',$string);
这也适用于<br>
(也是正确的HTML)
考虑标志PREG_SPLIT_NO_EMPTY
,因为使用示例字符串将会有空元素:
preg_split('/<br(\s\/)?>\K|\s/',$string,null,PREG_SPLIT_NO_EMPTY);
更新:要保留<br />
,您需要使用\K
重置匹配项。在the language reference中有一个很好的例子:
从PHP 5.2.4起,\ K可用于重置匹配开始。例如, 模式foo \ Kbar匹配&#34; foobar&#34;,但报告它已匹配 &#34; BAR&#34 ;.使用\ K不会干扰捕获的设置 子。例如,当模式(foo)\ Kbar匹配&#34; foobar&#34;时, 第一个子字符串仍然设置为&#34; foo&#34;。