0

ページ内のjavascript関数から直接リンクを解析しようとしています。必要なhtml情報を解析することはできますが、javascriptの部分で困惑しています。これはphpとおそらく正規表現で達成できるものですか?

function videoPoster() {
    document.getElementById("html5_vid").innerHTML = 
        "<video x-webkit-airplay='allow' id='html5_video' style='margin-top:" 
        + style_padding 
        + "px;' width='400' preload='auto' height='325' controls onerror='cantPlayVideo()' " 
        + "<source src='http://video-website.com/videos/videoname.mp4' type='video/mp4'>";
}

引き出す必要があるのは、リンク「http://video-website.com/videos/videoname.mp4」です。ヘルプやポインタをいただければ幸いです。

4

4 に答える 4

2

/http://.*\.mp4/http://との間のすべての文字が表示されます.mp4

実際の動作をご覧ください。

セッションIDが必要な場合は、次のようなものを使用してください/http://.*\.mp4?sessionid=\d+/

于 2013-01-03T02:27:52.760 に答える
2

一般的に、いいえ。完全なjavascriptパーサー以外の何物も常にURLを抽出することはなく、それでも、自明ではないように計算されるURLで問題が発生します。

実際には、実際に解析する必要のあるコードで機能する最も単純なキャプチャ正規表現を使用するのが最適な場合がよくあります。この場合:

['"](http://[^'"]*)['"]

その正規表現を文字列として入力する必要がある場合は、エスケープに注意してください。

URLにエスケープされていない引用符がある場合、これは失敗します。それは有効ですが、まれです。解析しているものを書いている人は誰でも、JavaScriptのURLを参照するのが面倒なので、それらを使用する可能性はほとんどありません。

于 2013-01-03T02:30:48.823 に答える
0

以下は、HTML内の任意のURLをキャプチャします

$matches=array();
if (preg_match_all('/src=["\'](?P<urls>https?:\/\/[^"\']+)["\']/', $html, $matches)){
    print_r($matches['urls']);
}

javascriptで同じことをしたい場合は、これを使用できます。

var matches;
if (matches=html.match(/src=["'](https?:\/\/[^"']+)["']/g)){
//gives you all matches, but they are still including the src=" and " parts, so you would
//have to run every match again against the regex without the g modifier
}
于 2013-01-03T11:35:06.930 に答える
0

特定のケースでは、URL内のどの文字もエスケープされていなければ、これは機能するはずです。

preg_match("/src='([^']*)'/", $html, $matches);
$url = $matches[1];

preg_match()のマニュアルページを参照してください。おそらくエラー処理を追加して、関数が1を返すこと(正規表現が一致すること)を確認し、場合によっては追加のチェックも実行する必要があります(URLがで始まり、http://が含まれることを確認するなど.mp4?)。

(すべてのWebスクレイピング手法と同様に、スクレイピングしているサイトの所有者または保守者は、スクリプトを壊すような将来の変更を行う可能性があるため、それに備える必要があります。)

于 2013-01-03T02:49:15.880 に答える