2

请帮助我更有效地剥离以下内容。

a href="/mv/test-1-2-3-4.vFIsdfuIHq4gpAnc.html"

我访问的网站有一些,我只需要这两个时期之间的一切:

vFIsdfuIHq4gpAnc

我想使用适用于正则表达式环境的当前格式和编码。请帮我调整我的以下预赛线:

preg_match_all("(./(.*?).html)", $sp, $content); 

非常感谢我在这方面获得的任何帮助,并在此先感谢您!

这是我的完整代码

$dp = "http://www.cnn.com";

$sp = @file_get_contents($dp);
if ($sp === FALSE) {
    echo("<P>Error: unable to read the URL $dp.  Process aborted.</P>");
    exit();
}

preg_match_all("(./(.*?).html)", $sp, $content); 

foreach($content[1] as $surl) {
    $nctid = str_replace("mv/","",$surl);
    $nctid = str_replace("/","",$nctid);
   echo $nctid,'<br /><br /><br />';

以上是我一直在做的

4

4 回答 4

2

没关系,真的。只是你不想匹配.*?,你想匹配多个不是句号的字符,所以可以[^.]+改用。

$sp = 'a href="/mv/test-1-2-3-4.vFIsdfuIHq4gpAnc.html"';
preg_match_all( '/\.([^.]+).html/', $sp, $content );

var_dump( $content[1] );

打印的结果:

array(1) {
  [0]=>
  string(16) "vFIsdfuIHq4gpAnc"
}

这是一个如何遍历所有链接的示例:

<?php
$url = 'http://www.cnn.com';

$dom = new DomDocument( );
@$dom->loadHTMLFile( $url );

$links = $dom->getElementsByTagName( 'a' );

foreach( $links as $link ) {
    $href = $link->attributes->getNamedItem( 'href' );
    if( $href !== null ) {
        if( preg_match( '~mv/.*?([^.]+).html~', $href->nodeValue, $matches ) ) {
            echo "Link-id found: " . $matches[1] . "\n";
        }
    }
}
于 2012-10-09T09:11:18.753 回答
2

您可以使用explode()

$string = 'a href="/mv/test-1-2-3-4.vFIsdfuIHq4gpAnc.html"';
if(stripos($string, '/mv/')){
    $dots = explode('.', $string);
    echo $dots[(count($dots)-2)];
}
于 2012-10-09T09:12:30.280 回答
0

更简单

$sp="/mv/test-1-2-3-4.vFIsdfuIHq4gpAnc.html";
$regex = '/\.(?P<value>.*)\./';
preg_match_all($regex, $sp, $content);
echo nl2br(print_r($content["value"], 1));
于 2012-10-09T09:32:12.817 回答
0

怎么用explode

$exploded = explode('.', $sp);
$content = $exploded[1]; // string: "vFIsdfuIHq4gpAnc"
于 2012-10-09T09:11:09.877 回答