将文本拆分为由针标识的较小部分

时间:2017-07-29 16:31:51

标签: php split

我想分割一个像这样的字符串:

'This <p>is</p> a <p>string</p>'

我想获得4个字符串:

  • <p>is</p>

  • a
  • <p>string</p>

所以我想逐个找到<p></p>及其内容来拆分它。我怎样才能保持相同的顺序呢?

我可以得到这个&#39;使用该代码:$html1 = strstr($html, '<p', true);但我不知道如何继续拆分以及如何为具有许多针(至少2个不同针)的可变弦进行拆分。你能帮帮我吗?

2 个答案:

答案 0 :(得分:1)

您可以将preg_split与一些选项一起使用($s是输入字符串):

preg_split("#\s*(<p>.*?</p>)\s*#", $s, 0, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);

这将返回一个数组。对于您的示例输入,它返回:

["This", "<p>is</p>", "a", "<p>string</p>"]

repl.it

上查看它

答案 1 :(得分:0)

因为你的针很复杂,你可以使用preg_match_all

$html = 'This <p>is</p> a <p>string</p>';

// Regex to group by paragraph and non-paragraph
$pattern = '/(.*?)(<p>.+?<\/p>)/';

// Parse HTML using the pattern and put result in $matches
preg_match_all($pattern,$html,$matches, PREG_SET_ORDER);

// Will contain the final pieces
$pieces = [];

// For each $match array, the 0th member is the full match
// every other member is one of the pieces we want
foreach($matches as $m) while(next($m)) $pieces[] = trim(current($m));

print_r($pieces);// ['This', '<p>is</p>', 'a', '<p>string</p>']

Live demo