var slideshow_photos = [
"http://domain/2294484.jpg"
, "http://domain/2294485.jpg"
, "http://domain/2294488.jpg"
];
</script>
<!-- begin
我只需要网址:
http://domain/2294485.jpg
http://domain/3155485.jpg
等等。
我该怎么做?
我的尝试:
preg_match('#var slideshow_photos = \[\s*"(.*?)"\s*];#s', $contentPage, $links);
输出:
echo $links[1];
示例结果:
[1] => http://domain/3527069.jpg" , "http://domain/3324894.jpg)
有什么想法吗?
这是一项艰巨的任务......
答案 0 :(得分:0)
默认情况下,您似乎有不合理的量词。尝试删除?
中的(.*?)
。
如果不起作用,请尝试使用([^"]*)
代替(.*?)
。
答案 1 :(得分:0)
检查一下它可以正常使用您的结果
<?php
$contentpage = '<SCRIPT language="javascript" type="text/javascript">
var slideshow_photos = ["http://domain/2294484.jpg","http://domain/2294485.jpg","http://domain/2294488.jpg"];
/*for($i=0;$i<slideshow_photos.length;$i++){
$urls = document.write(slideshow_photos[$i]);
}*/
</SCRIPT>';
preg_match('#var slideshow_photos = \[\s*"(.*?)"\s*];#s',$contentpage, $links);
$data = str_replace('"','',$links[1]);
$dataArray = explode(',',$data);
foreach($dataArray as $key=>$value):
echo $dataArray[$key]."<br/>";
endforeach;
?>
答案 2 :(得分:0)
最简单的方法是抓取[]
的内容,然后用explode()
解析出来:
$links = array();
preg_match('/slideshow_photos = \[([^]]+)\]/', $contentPage, $matches);
$matches = explode(',', $matches[1]);
foreach ($matches as $link) {
// Trim off the whitespace and quotes
$links[] = trim($link, " \"\n");
}
var_dump($links);
array(3) {
[0]=>
string(25) "http://domain/2294484.jpg"
[1]=>
string(25) "http://domain/2294485.jpg"
[2]=>
string(25) "http://domain/2294488.jpg"
}
这可能都被塞进正则表达式,但这是一个程序上的替代方案。
这是一个只运行正则表达式的解决方案。表达式http[^"]+"
找到http
及其后的所有内容,直到下一个"
双引号。
$links = array();
preg_match_all('/(http[^"]+)"/', $contentPage, $links);
var_dump($links[1]);
array(3) {
[0]=>
string(25) "http://domain/2294484.jpg"
[1]=>
string(25) "http://domain/2294485.jpg"
[2]=>
string(25) "http://domain/2294488.jpg"
}
答案 3 :(得分:0)
这是完整的工作代码
我已经分两步拆分了比赛,在第一步我得到了网址列表部分字符串,在下一步中,我已经分割了网址。希望这有帮助
<?php
$fullStr = <<<REGEX
var slideshow_photos = [
"http://domain/2294484.jpg"
, "http://domain/2294485.jpg"
, "http://domain/2294488.jpg"
];
REGEX;
$urlsStrPattern = '#var slideshow_photos = \[\s*?(".*?")\s*];#s';
$urlsPattern = '#"(.*?)"#s';
$urlsStrMatch;
preg_match($urlsStrPattern,$fullStr,$urlsStrMatch);
var_dump($urlsStrMatch[1]);
$urlsListMatch;
preg_match_all($urlsPattern,$urlsStrMatch[1],$urlsListMatch);
var_dump($urlsListMatch[1]);
?>
输出
string '"http://domain/2294484.jpg"
, "http://domain/2294485.jpg"
, "http://domain/2294488.jpg"' (length=101)
array
0 => string 'http://domain/2294484.jpg' (length=25)
1 => string 'http://domain/2294485.jpg' (length=25)
2 => string 'http://domain/2294488.jpg' (length=25)