php正则匹配之后的字符串长度问题,求高手帮助

2013-09-20 17:34:30 +08:00
 jacy
有一个html中包含很多个这样的:
<i class="piaoshu">323</i>
我要把323这样的数字获取到,我是这样写的:

preg_match_all('/<i class="piaoshu">.*([\d\.]+?).*<\/i>/sU', $data, $matchnum);

然后我想把获取到的数据按大小排序,但是发现排序结果是错误的,百思不得其解,后来用var_dump了一下 $matchnum,发现了问题:

array(12) { [0]=> string(26) "323" [1]=> string(26) "120" [2]=> string(25) "83" [3]=> string(26) "244" [4]=> string(26) "149" [5]=> string(25) "84" [6]=> string(26) "101" [7]=> string(25) "47" [8]=> string(25) "67" [9]=> string(25) "83" [10]=> string(26) "351" [11]=> string(26) "222" }

比如第一个323应该长度是3啊,怎么成26了?仔细算算,发现是长度和<i class="piaoshu">323</i>刚好一样?这是怎么回事?
我要如何修改,能够正常用sort排序?
4436 次点击
所在节点    PHP
10 条回复
bitsmix
2013-09-20 17:56:56 +08:00
1 发个 gist 嘛
2 html 的话,不能换左用 dom 的方式操作嘛
3 没明白正则跟排序有啥关系
haiyang416
2013-09-20 18:05:33 +08:00
正则式
/<i class="piaoshu">(\d+)<\/i>/
你那个我实在理解不能。
andyhu
2013-09-20 18:11:01 +08:00
preg_match_all('/<i class="piaoshu">\s*?([\d\.]+?)\s*?<\/i>/si', $data, $matchnum);
jacy
2013-09-20 18:12:52 +08:00
@haiyang416 发现问题了,正则式写错了,我只要像323这样的数字,但是实际标签也匹配出来了,刚好在浏览器中要不显示出标签。
我只有匹配出数字,怎样写
正则实在学不会
jacy
2013-09-20 18:22:24 +08:00
@andyhu 发现问题了,这样的结果是<i class="piaoshu">323</i>,刚好浏览器里只显示323,标签没显示出来
但是我只要323,怎样写?
jacy
2013-09-20 18:39:38 +08:00
好吧,我知道原因了。$matchnum[0]和$matchnum[1]是不一样的,我应该用1.
Mutoo
2013-09-20 18:52:13 +08:00
@jacy 对的,0是原字符串,1才是第一个括号匹配位置
yakczh
2013-09-20 18:57:17 +08:00
恭喜你,答对了
pathletboy
2013-09-20 19:18:22 +08:00
@jacy 0是匹配到的完整字符串。
chenwl
2013-09-21 13:09:47 +08:00
呵呵~成问答帖了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/83109

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX