使用 Preg_Match 排除字符


Exclude Characters using Preg_Match

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)

知道吗?

这是一个粗略的快速任务...

看看这个 它适用于您的结果

<?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;
?>
默认情况下,

您似乎有不贪婪的量词。尝试删除 (.*?) 中的?

如果这不起作用,请尝试使用 ([^"]*) 而不是 (.*?)

最简单的方法是获取[]的内部内容,然后用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"
  }

这是完整的工作代码

我将匹配分为两步,第一步我得到了 urls 列表部分字符串,在下一步中,我拆分了 url。希望这有帮助

<?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)