2010-09-10 2 views
1

мне нужно написать регулярное выражение для следующего (NB игнорировать возврат каретки, я добавил их для удобства чтения.):Помощи с регулярным выражением, чтобы очистить сайт

<strong>Contact details</strong> 
<p><label>Office:</label>&nbsp;+44 (0)12 3456 7890<br /> 
<label>Direct:</label>&nbsp;+44 (0)12 3456 7890<br /> 
<label>Mobile:</label>&nbsp;+44 (0)1234 567890<br /> 
<label>E-mail:</label>&nbsp;<a href="mailto:[email protected]">[email protected]</a><br /> 

Я использую

/([\+\d\(\)\s]+)/ 

Что соответствует числовым блокам, и я могу использовать и смещать 0-2, чтобы идентифицировать их. Проблема в том, что он также возвращает пустое пространство, которое закручивает мои смещения. Как я могу сказать, что «он должен содержать хотя бы одну цифру в матче»?
Я также попробовать

/\<label\>Office:\<\/label\>&nbsp;([\+\d\(\)\s]+)\<br \/\>/ 

Но что бы вернуть

+44 (0)12 3456 7890<br /> 
<label>Direct:</label>&nbsp;+44 (0)12 3456 7890<br /> 
<label>Mobile:</label>&nbsp;+44 (0)1234 567890<br /> 
<label>E-mail:</label>&nbsp;<a href="mailto:[email protected]">[email protected]</a> 
+0

Скремблирование контактной информации - зачем вы хотите это делать ... что пахнет, как массовая сборка электронной почты ...? – t0mm13b

ответ

1

не очень хорошая идея, чтобы разобрать HTML с использованием регулярных выражений, используйте DOM основы синтаксического анализа вместо этого.

Ваше регулярное выражение не работает, потому что его жадный, чтобы сделать его нежадным изменения

([\+\d\(\)\s]+) 

в

([\+\d\(\)\s]+?) 

Также +, ( и ) будет рассматриваться буквально в классе полукокса. Поэтому нет необходимости их избегать:

([+\d()\s]+?) 
+0

Спасибо. Я использую simple_html_dom, чтобы получить это далеко, но мне нужно regexp для последнего шага вытащить номер. Спасибо за советы. – Simon

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