2015-03-07 1 views
-1

Я пытаюсь извлечь адрес и номер телефона из HTML-кода.PHP preg_match для извлечения адресов из html-кода

Сначала я получаю содержимое адреса-контейнера из содержимого страницы. preg_match('/id="member-addresses".*?<\/div>/is', $webpage, $contact_details);

Это возвращает этот

id="member-addresses"> 
       <h2>Contact details</h2> 
        <h3 id="foobar">Work</h3> 
         <p> 
          123 Fake Street, Main Area, PG42 TGJ<br /> 

          Tel: 020 9 555 42589<br /> 
</p> 
</div> 

Теперь я хочу, чтобы получить рабочий адрес.

preg_match('/Work</h3><p>.*?<br \/>/', $contact_details[0], $address_work); 

Это ничего не возвращает. Что с этим не так.

+1

Использование регулярного выражения для синтаксического анализа HTML - это [плохая идея] (http://stackoverflow.com/a/1732454/2370483) – Machavity

+0

Каков наилучший способ сделать это? –

+0

Помимо регулярного выражения существует несколько способов сделать это. http://php.net/manual/en/domdocument.loadhtml.php http://php.net/manual/en/book.simplexml.php (если он действителен xhtml) есть также добавить в библиотеки, которые вы можете Добавить. – chris85

ответ

1

У вас есть несколько ошибок.

<?php 
$a = ' id="member-addresses"> 
       <h2>Contact details</h2> 
        <h3 id="foobar">Work</h3> 
         <p> 
          123 Fake Street, Main Area, PG42 TGJ<br /> 

          Tel: 020 9 555 42589<br /> 
</p> 
</div>'; 
preg_match('~Work</h3>\s+<p>(.*?)<br />~is', $a, $address_work); 
print_r($address_work); 

Первая ошибка, которую вы используете «/» в качестве разделителя регулярного выражения, так что вам нужно, чтобы избежать всех случаев, что в регулярном выражении. Я поменял местами, чтобы быть тильдами, потому что я не нашел для них никакой пользы. Второй вопрос между закрытием h3 и p у вас есть пробел (если пустое поле является необязательным изменением \s+ - \s*, то это требует +). Третий вопрос: вы не группируете свои поиски. Потенциальная четвертая проблема заключается в модификаторах PCRE: i после того, как тильда означает, что регистр нечувствителен к регистру, вы, возможно, не захотите этого. s означает, что . будет соответствовать новым символам, а также любому персонажу. http://php.net/manual/en/reference.pcre.pattern.modifiers.php

Смежные вопросы