preg_match, regexp, php, извлекать текст из HTML - PullRequest
0 голосов
/ 22 мая 2010

Я пытаюсь извлечь "Флорида (Флорида)" из http://www.auctionarms.com/search/displayitem.cfm?itemnum=9736364&oh=216543. Мой код

//get location
   $pattern = "/(State)</i>:</td>(.*)</td>/";
   preg_match_all($pattern, $htmlContent, $matches);
   print_r($matches);
Есть идеи, почему не работает?

Ответы [ 2 ]

1 голос
/ 22 мая 2010

Когда у вас есть (State) в регулярном выражении, оно будет соответствовать термину State во входной строке как группе, оно не будет совпадать с литеральными круглыми скобками во входных данных - вам нужно будет экранировать их, как выс / s - /\(State\)<\/....

Тогда возникает проблема, заключающаяся в том, что вокруг много пробелов (включая новые строки - вам нужно будет включить модификатор m) и <b/>пометить заголовок, который вы, кажется, не включили в регулярное выражение.Даже если вы исправите эти проблемы, вы будете в значительной степени зависеть от точной разметки, используемой веб-сайтом, который вы просматриваете.Это общая проблема, с которой вы столкнетесь при разборе HTML с помощью регулярных выражений.Было бы лучше использовать HTML-парсер (например, создать новый DOMDocument и вызвать его метод loadhtml).

0 голосов
/ 22 мая 2010

Я считаю, что причина в том, что строка, которую вы пытаетесь найти, находится на следующей строке. Вам нужно включить многострочный режим с помощью:

$pattern = "/\(State\)<\/i>\:<\/td>(.*)<\/td>/m";

Но помните: попытка разобрать HTML с помощью регулярных выражений заставляет нечестивого ребенка плакать кровью девственниц. См:

RegEx соответствует открытым тегам, кроме автономных тегов XHTML

...