2

以下をより効率的に取り除くのを手伝ってください。

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

私が訪問するサイトにはそれらのいくつかがあります、私は2つの期間の間のすべてを必要とするだけです:

vFIsdfuIHq4gpAnc

正規表現環境で機能する現在の形式とコーディングを使用したいと思います。次のpregマッチラインを調整するのを手伝ってください:

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

使ってexplodeみませんか?

$exploded = explode('.', $sp);
$content = $exploded[1]; // string: "vFIsdfuIHq4gpAnc"
于 2012-10-09T09:11:09.877 に答える
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 に答える