PHP preg_match для поиска и определения местоположения динамического URL из страниц HTML - PullRequest
0 голосов
/ 05 августа 2011

Мне нужна помощь с REGEX, который найдет ссылку в разных форматах в зависимости от того, как она была вставлена ​​на страницу HTML.

Я умею читать страницы в PHP. Просто не в состоянии направить REGEX, который найдет URL и изолирует их.

У меня есть несколько примеров того, как они вставляются. Где иногда они представляют собой текстовые ссылки, некоторые из них обернуты вокруг них. Есть даже странный случай, когда текст, который не является частью ссылки, вставляется без пробелов.

И идентификатор статьи, и ключ статьи никогда не совпадают. Однако ключ статьи всегда заканчивается цифрой. Если это возможно, я уверен, что мог бы использовать помощь. Спасибо

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

Ответы [ 2 ]

1 голос
/ 05 августа 2011

НЕ ИСПОЛЬЗОВАТЬ REGEX! Использовать синтаксический анализатор XML ...

$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
  }
}

Так что $regexToMatchUrls будет регулярным выражением jsut, чтобы соответствовать URL-адресам, которые вы ищете ... а не любому html, что намного проще - тогда вы можете предпринять действия, когда совпадение произойдет.

0 голосов
/ 05 августа 2011

Это регулярное выражение для меня:

/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

...