2011-08-04 24 views
0

どのようにHTMLページに挿入されたかに基づいて異なるフォーマットで提供されるリンクを見つけるREGEXに関するヘルプが必要です。HTMLページから動的URLを見つけて見つけ出すPHP preg_match

私はPHPでページを読むことができます。 URLを見つけてそれらを隔離する正しいREGEXにはちょうどできません。

私は挿入方法についていくつかの例があります。ときどきそれらがプレーンテキストリンクであり、それらの周りにラップされたものがあります。リンクの一部ではないテキストが間隔を置かずに挿入される奇妙な機会もあります。

Article IDとArticle Keyは決して同じではありません。 Article Keyは常に数値で終わります。これが可能なら私は確かに助けを使うことができます。ありがとう

Here are a few examples. 
http://www.example.com/ArticleDetails.aspx?ArticleID=3D10045411&AidKey=3D-2086622941 

http://example.com/ArticleDetails.aspx?ArticleID=10919199&AidKey=1956996566  

<a href="http://www.example.com/ArticleDetails.aspx?ArticleID=10773616&amp;AidKey=1998267392">http://www.example.com/ArticleDetails.aspx?ArticleID=10773616&amp;AidKey=1998267392</a> 

<a href="http://www.example.com/ArticleDetails.aspx?ArticleID=10773616&amp;AidKey=1998267392">This is a link description</a> 

http://example.com/ArticleDetails.aspx?ArticleID=10975137&AidKey=701321736this is not part of the url. 

最後に私はURLを探しています。

http://example.com/ArticleDetails.aspx?ArticleID=10975137&AidKey=701321736 

答えて

0

私のためにこの正規表現作品:

/http:\/\/(www\.)?example\.com\/ArticleDetails.aspx\?ArticleID=(.*?)(\&|\&amp;)AidKey=([\d\w-]*)/g 

はUPDATE: 私は正規表現の末尾に\dを追加しました。

/http:\/\/(www\.)?example\.com\/ArticleDetails.aspx\?ArticleID=(.*?)(\&|\&amp;)AidKey=([\d\w-]*)\d/g 

PHPでそれを使用するには、アクションに/.../msi

PHPの例を必要とする:http://ideone.com/N0TKM

+0

私は運がなかった。しかし、/ gを/ im(/ http:\/\ /(www \。)?example \ .com \ /ArticleDetails.aspx \???????????????????????????? ArticleID =(。*?)(\&| \ &) AidKey =([\ d \ w - ] *)/ im) – Tim

+0

REGEXは分​​かっていませんが、動作していれば私は幸せです。ありがとうT – Tim

+0

@ティム:私はPHPの例で私の答えを更新しました。 – scube

1

DO NOT USE A REGEX!ので$regexToMatchUrlsはあなたが探しているのURL ...ではないはるかに簡単であるHTMLのいずれかにマッチする正規表現jsutだろう...

$dom = DOMDocument::loadHTMLFile($pathToFile); 
$finder = new DOMXpath($dom); 
$anchors = $finder->query('//a[@href]'); 

foreach($anchors as $anchor){ 
    $href = $anchor->getAttribute('href'); 
    if(preg_match($regexToMatchUrls, $href)){ 
    //do stuff 
    } 
} 

をXMLパーサを使用します - マッチが発生したときに行動を起こすことができます。

+1

、私はそれをチェックアウトします。ちなみに、HREFを囲んでいないプレーンテキストのリンクも見つけられますか? – Tim

+0

これはありません..これはアンカータグのみです。あなたがアンカーを分析する必要がないなら、あなたは正規表現を使うことができます。私はあなたが ''型のコンテキスト内のURLだけを必要としていたと思って、与えられたパターンを数えました...私の間違い:-) – prodigitalson

+0

アンカーテキストを含むテキストノードを検索することによってxpathでそれを行うこともできますそれは恐らく正規表現を使うだけでは問題にならないでしょう...しかし、結論としては、もしoyuがHTML/XMLが実際のコンテキストを与えるものを検索する必要があれば、XMLパーサを使用します...もしあなたが特定のテスト文字列パターン全体を文書全体に渡り、正規表現を使用します。 – prodigitalson

関連する問題