Как получить числа между тегами HTML

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

Пример HTML-кода:

<div class = "col-md-3 product-c"><span title = "how many x product left"> 4 left</div>

$pattern = <div class = "col-md-3 product-c"><span (?:.*?)>(.*?)</div>

Этот шаблон дает мне 4 left, но я хочу получить только номер 4 (или что-то еще), поэтому я попробовал этот пример ниже:

$pattern = <div class = "col-md-3 product-c"><span (?:.*?)>([0-9]+)</div>

Но на этот раз он ничего не возвращает, просто пустой массив.

Как я могу поместить между этими тегами только числа?

Вы пробовали это делать? Может помочь stackoverflow.com/questions/6278296/…

Parth Manaktala 31.07.2018 04:42

@Parth Да, пробовал, но все равно спасибо :)

Teoman Tıngır 31.07.2018 04:45

@Parth Это было бы слишком свободно для этого. Что-то вроде <h1> подошло бы.

user3783243 31.07.2018 04:48

@ user3783243 Хорошо

Parth Manaktala 31.07.2018 04:56

Вам очень поможет использование библиотеки синтаксического анализатора html. Подумайте об этом, если вам нужно серьезно заняться этим.

Adriano 31.07.2018 07:18
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
5
152
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Есть две проблемы:

  • У вас есть пробелы перед цифрами, которые вы не учли.
  • У вас есть текст и пробелы после цифр, которые вы не учли

Это зависит от того, какие условия точный вы хотите указать, но это будет работать:

<div class = "col-md-3 product-c"><span (?:.*?)>(?:\s*)([0-9]+)(?:[^0-9]*)</div>
  • (?:.*?) игнорирует все, что может быть в атрибутах <span>
  • (?:\s*) игнорирует пробелы перед цифрой (ами)
  • ([0-9]+) группирует сами цифры
  • (?:[^0-9]*) игнорирует все, что находится после цифр

И в этом видно работающий здесь.

Сказав это, вы можете рассмотреть парсер HTML.

это работает, спасибо за подробное объяснение. Я пытаюсь научиться, но я новичок в регулярных выражениях ..

Teoman Tıngır 31.07.2018 04:47

Я думаю, что использование парсера будет лучшим подходом для этого. Как только у вас будет правильное значение (путем синтаксического анализа в span и проверки title), вы можете просто преобразовать его в int, и это будет желаемое значение.

$html = '<div class = "col-md-3 product-c"><span title = "how many x product left"> 4 left</div>';
$dom = new domdocument();
$dom->loadhtml($html);
$spans = $dom->getelementsbytagname('span');
foreach($spans as $span) {
    if ($span->getattribute('title') == 'how many x product left') {
        echo (int)$span->nodeValue;
    }
}

Другие вопросы по теме