使用Preg_Match排除字符

时间:2012-02-25 04:46:19

标签: php regex

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)

有什么想法吗?

这是一项艰巨的任务......

4 个答案:

答案 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)