Onetrickpony попал в сердце, что не так с вашим регулярным выражением: ваш цифровой идентификатор имеет несколько цифр, но ваше регулярное выражение соответствует только одной цифре.
Есть еще кое-что, что я собираюсь выбросить там для вашего рассмотрения. Во-первых, если в вашем теге <a>
есть другие атрибуты, ваше регулярное выражение не будет выполнено. Например, если есть атрибут target="_blank"
, это испортит ваше регулярное выражение. К счастью, есть простой способ обойти, что:
preg_match_all('/<a .*?href="article\.html\?id=([0-9]+)".*?>(.*?)<\/a>/',
$webpage, $match);
По сути, я просто проложенный атрибут href
.*?
с. Вопросительный знак делает совпадения lazy (вместо значения по умолчанию жадный), что предотвратит его потребление больше, чем вы хотите. Я также заменил ваш [^<]
ленивым матчем, потому что я обычно считаю его немного чище.
ОБНОВЛЕНИЕ: Как указано правильно, указатель периода и вопроса в article.html?id=
должен быть экранирован. Период не имеет большого значения, за исключением того, что оставить его там будет article_html
или что-нибудь еще, что, вероятно, не вызывает беспокойства. Однако не избежать вопросительного знака - проблема. Это делает l
в html
необязательным, но тогда нет ничего, на самом деле совпадающего с вопросительным знаком, и, вероятно, поэтому мое исправленное решение не срабатывало. Спасибо, демона!
Связанные: http://stackoverflow.com/a/1732454/1415038 – woz
'[0-9] +', потому что идентификатор содержит многократный цифры, также escape '?' –
** Не используйте регулярные выражения для синтаксического анализа HTML. Используйте подходящий модуль синтаксического анализа HTML. ** Вы не можете надежно проанализировать HTML с регулярными выражениями, и вы столкнетесь с печалью и разочарованием в будущем. Как только HTML изменится с ваших ожиданий, ваш код будет сломан. См. Http://htmlparsing.com/php или [этот поток SO] (http://stackoverflow.com/questions/3577641/how-do-you-parse-and-process-html-xml-in-php) для примеры правильного анализа HTML с PHP-модулями, которые уже были написаны, протестированы и отлажены. –