2013-07-03 3 views
1

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

Я работаю с preg_match_all. У меня есть 7 информации, чтобы получить: название, автор, редактор ...

У меня возникла проблема с созданием маски соответствия. Например, мне нужен код продукта. Для каждой страницы есть от 3 до 10 продуктов кода. :

<li><label>Réf : </label>21608</li> 

Сначала я пытаюсь это:

$mask ="/Réf :(.*)<\/li>/Us"; 

Это работа, но я хочу только цифры. Я ищу справочники регулярных выражений в Интернете, но я не понимаю, как использовать синтаксис для моей цели, потому что этот продукт кода не существует между двумя тегами: <open>...</open>. Этот код продукта имеет 4 или 5 номеров.

Спасибо за помощь!

+0

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

+0

См. Также: http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags –

ответ

0

Давайте попробуем шаг за шагом, чтобы соответствовать этим цифрам:

  1. Мы Réf, давайте сделаем это /réf/i и использовать модификатор i, чтобы соответствовать нечувствительно к регистру.
  2. Существует space : space, давайте сделаем это динамичный и сравнить его с \s*, который будет соответствовать ноль или более раз пробельные символы /réf\s*:\s*/i
  3. Мы тогда нет ни одной цифры, мы можем использовать \D*, который будет соответствовать все, кроме цифр: /réf\s*:\s*\D*/i
  4. мы знаем, что есть 4 до 5 цифр, мы будем использовать \d{4,5}, который будет соответствовать цифре 4 или 5 раз: /réf\s*:\s*\D*\d{4,5}/i
  5. нам нужны только цифры, поэтому давайте их в группу: /réf\s*:\s*\D*(\d{4,5})/i

PHP код

$string = '<li><label>Réf : </label>21608</li>'; 
preg_match_all('/réf\s*:\s*\D*(\d{4,5})/i', $string, $m); 
print_r($m[1]); 

Выход

Array 
(
    [0] => 21608 
) 
+1

Спасибо большое, теперь я не знаю.Это очень ясно. –

+0

@FlorentDelage lol Я, хотя вы полностью забыли об этом. Хорошо в любом случае рад помочь. Не забудьте [принять] (http://meta.stackexchange.com/a/5235/) ответ! – HamZa

1

Try следующее регулярное выражение:

/Réf :\D*(\d+)<\/li>/ 
  • \D: нецифровой
  • \d: цифра
Смежные вопросы