PHP 在 <img> 标签上拆分或分解字符串
PHP split or explode string on <img> tag
我想将标签上的字符串拆分成不同的部分。
$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.'
)
你走对了。您必须以这种方式设置标志 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."
}
您还需要将 here 所述的非贪婪字符 (?) 包含到您的模式中,以强制它获取第一个出现的实例。 '/(<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."
}
我想将标签上的字符串拆分成不同的部分。
$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.'
)
你走对了。您必须以这种方式设置标志 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."
}
您还需要将 here 所述的非贪婪字符 (?) 包含到您的模式中,以强制它获取第一个出现的实例。 '/(<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."
}