PHP如何在<img>标签处分割或分离字符串

8
我想将一个包含 <p> 标签的字符串分割成不同的部分。
$string = 'Text <img src="hello.png" /> other text.';

下一个函数目前还不能正确运行。
$array = preg_split('/<img .*>/i', $string);

输出应该是:
array(
    0 => 'Text ',
    1 => '<img src="hello.png" />',
    3 => ' other text.'
)

什么样的模式可以完成它? 编辑 如果有多个标签,该怎么办?
$string = 'Text <img src="hello.png" > hello <img src="bye.png" /> other text.';
$array = preg_split('/(<img .*>)/i', $string, -1, PREG_SPLIT_DELIM_CAPTURE);

输出应该是:
array (
  0 => 'Text ',
  1 => '<img src="hello.png" />',
  3 => 'hello ',
  4 => '<img src="bye.png" />',
  5 => ' other text.'
)
2个回答

4

您走在正确的道路上。您需要以以下方式设置标志PREG_SPLIT_DELIM_CAPTURE

$array = preg_split('/(<img .*>)/i', $string, -1, PREG_SPLIT_DELIM_CAPTURE);

通过适当地编辑多个标签,使用正则表达式:

$string = 'Text <img src="hello.png" > hello <img src="bye.png" /> other text.';
$array = preg_split('/(<img[^>]+\>)/i', $string, -1, PREG_SPLIT_DELIM_CAPTURE);

这将输出:
array(5) {
  [0]=>
  string(5) "Text "
  [1]=>
  string(22) "<img src="hello.png" >"
  [2]=>
  string(7) " hello "
  [3]=>
  string(21) "<img src="bye.png" />"
  [4]=>
  string(12) " other text."
}

这个过时了吗?当我尝试输出这段代码时,我只看到:'array'。 - twan
@twan,你是怎么使用它的? - Federkun
我已经修复了,之前使用的是echo而不是print_r($array)。哈哈。 - twan

2

您需要在模式中包含非贪婪字符(?),如此处所述,以强制它抓取第一个出现的实例。 '/(<img .*?\/>)/i'

因此,您的示例代码将类似于:

$string = 'Text <img src="hello.png" /> hello <img src="bye.png" /> other text.';
$array = preg_split('/(<img .*?\/>)/i', $string, -1, PREG_SPLIT_DELIM_CAPTURE);

var_dump($array);

打印哪个结果:

array(5) {
    [0] =>
    string(5) "Text "
    [1] =>
    string(23) "<img src="hello.png" />"
    [2] =>
    string(7) " hello "
    [3] =>
    string(21) "<img src="bye.png" />"
    [4] =>
    string(12) " other text."
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接