php里的一个正则表达式的问题

阿采 发布于 2016/06/01 10:55
阅读 316
收藏 1
PHP

快要被整疯了,我用php抓取了一个网页源码,现在要获取到其中的类似data: [100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100] 这样的字符串,用下面的正则表达式来做解析,怎么一直都拿不到,有哪位大哥可以指点一下么?

data: [ 123,343,43,3,4,234] 类似这样,中间的数字个数和值都会变化

<?php
$teststr = " color: '#191970', Axis: 1, marker: { symbol: 'square' }, data: [100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100] }] }); });	});  ";

$reg = "/^data: \[ (\d+,)+\d+\]$/";

preg_match ($reg, $teststr,$aa);

var_dump($aa);
?>



加载中
0
乌龟壳
乌龟壳
前后的^$删掉试试
阿采
阿采
回复 @阿采 : 明白了,谢谢,结题。
乌龟壳
乌龟壳
回复 @阿采 : 对
阿采
阿采
回复 @乌龟壳 : 明白了,我搞错了,以为是^和$表示我要搜索出来的那个字符串的开头和结尾,所以其实不是,是在做正则全字符串匹配的时候才能用的是吧?
乌龟壳
乌龟壳
回复 @阿采 : ^代表匹配字符串的开头,$代表匹配字符串的结尾,你写的正则的意思是匹配一个字符串,以data开头,以]结尾。然而$teststr的开头是" color",所以匹配不上。这几乎所有正则引擎都是这个结果。
阿采
阿采
对了,删掉就对了。难道是php里对正则的特殊规定么?
0
e
earthdog

$reg ="/^data: \[ (\d+,)+\d+\]$/";

错了,改成:

$reg = "/\\bdata:\\s*\\[\\s*(\\d+,)*\\d+\\s*\\]/";

试试。正则中单行模式^匹配行首,$匹配行尾,你那个data如果不在一行的话是匹配不到的,还有就是字符串转义的问题。最好是找本正则的书来看看。


阿采
阿采
data在一行的,我就是看了正则的书写出的这个表达式,莫名的一直拿不到也是醉了
0
rainfer
rainfer
我感觉你获取的应该是json数据,解析json
0
阿采
阿采

引用来自“rainfer”的评论

我感觉你获取的应该是json数据,解析json
我用curl抓到,是网页源码,用<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 开头,上面例子里的data是在页面源代码的一段js脚本里的,这个不知道怎么用json来搞。所以打算直接从源码字符串通过正则表达式来抓取出我要的data数据
0
让往事随风
让往事随风
看看正则表达式资料:http://edu.51cto.com/course/course_id-4376.html,应该能帮到你
0
浅水一笑
浅水一笑
$reg = "/data: \[[\d+,]+\d+\]/";
0
fxhover
fxhover
preg_match('/data:\s*\[([\d,]+)\]/', $teststr, $data);
print_r($data);





返回顶部
顶部