Извлечение переменных из строки, регулярное выражение? - PullRequest
1 голос
/ 21 ноября 2011

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

Содержимое строки записывается в виде HTML несколькихизображения с веб-сайта, я хочу, чтобы конечный результат был 3 отдельных переменных: "$ Number1", "$ Number2" и "$ Status".

Пример содержимого входной строки $ html:

<div id="system">         
<img alt="2" height="35" src="/images/numbers/2.jpg" width="18" /><img alt="2" height="35" src="/images/numbers/2.jpg" width="18" /><img alt=".5" height="35" src="/images/numbers/point5.jpg" style="margin-left: -4px" width="26" /><img alt="system statusA" height="35" src="/images/numbers/statusA.jpg" width="37" /><img alt="2" height="35" src="/images/numbers/2.jpg" width="18" /><img alt="1" height="35" src="/images/numbers/1.jpg" width="18" /><img alt=".0" height="35" src="/images/numbers/point0.jpg" style="margin-left: -4px" width="26" />
</div>

Возможные значения, которые могут отображаться в этой строке:

  • 0.jpg
  • 1.jpg
  • 2.jpg
  • 3.jpg
  • 4.jpg
  • 5.jpg
  • 6.jpg
  • 7.jpg
  • 8.jpg
  • 9.jpg
  • point0.jpg
  • point5.jpg
  • statusA.jpg
  • statusB.jpg
  • statusC.jpg
  • statusD.jpg
  • statusE.jpg
  • statusF.jpg

Результатом должны быть переменные:

  • "Число 1" (XX.X) на основе первых двух чисел (0-9) и .0 или .5
  • "Статус "(statusX) на основе статуса
  • " Number2 "(XX.X) на основе последних двух чисел (0-9) и .0 или .5

Коддо сих пор:

$regex = '\balt='(.*?)';
preg_match($regex,$html,$match);
var_dump($match);
echo $match[0];

Возможно, я должен сделать это в несколько шагов или использовать другую функцию, кто мне может помочь?

Ответы [ 3 ]

0 голосов
/ 21 ноября 2011
0 голосов
/ 21 ноября 2011

Вы хотите только альт?Попробуйте этот пример xpath:

$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DomXpath($doc);

foreach($xpath->query('//img/@alt') as $node){
    echo $node->nodeValue."\n";
}
0 голосов
/ 21 ноября 2011

Самое первое, что вы должны спросить себя: «в каком формате мои входные данные».Поскольку в данном случае это явно фрагмент HTML, его следует передавать в анализатор HTML, а не в механизм регулярных выражений.

Я не знаю точных имен функций, но ваш код долженвыглядят так:

$htmltext = '<div id="system">[...]</div>';
$htmltree = htmlparser_parse($htmltext);
$images = $htmltree->find_all('img');
foreach ($images as $image) {
  echo $image->src;
}

Так что вам нужно найти анализатор HTML, который разбирает строку на дерево узлов.Узлы должны иметь методы поиска узлов внутри них на основе классов CSS, имен элементов или идентификаторов узлов.Для Python эта библиотека называется BeautifulSoup , для Java это JSoup , и я уверен, что есть что-то похожее для PHP.

Примеры предоставляются с simplehtmldom выглядит многообещающе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...