PHP-php分解字符串

发布于 2016-11-20 20:16:17 字数 682 浏览 1200 评论 2

abc<span>bcd</span>feieu<span>yy</span>feie

我有如上字符串,里面的span可能有0个或者多个,
我想要将如上字符串转为数组,也就是通过span标签进行分割,但分割方式有些特殊
最终生成的数组格式如下:
{
abc,
<span>bcd</span>,
feieu,
<span>yy</span>,
feie
}
有什么好的处理方法吗?

2013-5-31 11:25补充,数组中的字符串需要存在顺序
2013-5-31 12:03补充,如果字符串<font>abc</font>aaa<span>bcd</span>feieu<span>yy</span>feie
处理后
结果为:
{
<font>abc</font>aaa,
<span>bcd</span>,
feieu,
<span>yy</span>,
feie
}
也就是除<span>外的其他标签被当做正常字符串

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

虐人心 2017-05-22 13:49:19

<?php

$a = 'abc<span>bcd</span>feieu<span>yy</span>feie';
$reg = '#((?:(?<!<span>)[^<]+(?!</span>))|(?:<span>.+?</span>))#';
$matches = array();
preg_match_all($reg, $a, $matches);
print_r($matches);

更新:
关于为什么有2个记录?
第一个记录是正则的完全匹配内容
第二个记录的是第一个括号捕获的内容
如果正则表达匹配的内容和捕获的内容不一样,就能看出区别了
例如

$a = 'abcdabcdabe';
$reg = '/(ab)c/';
$matches = array();
preg_match_all($reg, $a, $matches);
print_r($matches);

其实如果不追求特别严谨的话,这样也是可以的

$reg = '#((?:[^<]+)|(?:<span>.+?</span>))#';

加上括号的目的是为了让局部保持整体,和不加括号的意思不一样

想挽留 2017-05-13 01:45:07

如果对数组排列顺序没有特别要求的话可以分两步来完成。
首先按<sapn>.+?</span>正则全匹配得到是(<sapn>...</span>)形式的字串数组A,
然后按<sapn>.+?</span>进行分割得到不是(<span>....</span>)串的一个数组B。
最后合并数组A,B(array_merge(A,B)),应该就是你要的结果了。
具体代码如下。

 <?php

$str = 'abc<span>bcd</span>feieu<span>yy</span>feie';
$reg = '#<span>(.+?)</span>#';
$A = array();
$B = array();
preg_match_all($reg,$str,$match_arr);
//print_r($match_arr);
$A = $match_arr[0];
$B= preg_split($reg,$str);
//print_r($B);
$res_arr = array_merge($A,$B);
print_r($res_arr);

?>

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文