2011-11-20 6 views
1

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

Содержимое строки соскабливается как 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" (ХХ.Х) на основе первых двух чисел (0 -9) и .0 или .5
  • «Статус» (statusX) на основании состояния
  • «Номер2» (XX.X) на основе последних двух чисел (0-9) и .0 или .5

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

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

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

ответ

0

Самое первое, что вы должны задать себе: «в каком формате мои входные данные». Поскольку в этом случае это явно фрагмент 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, выглядят многообещающими.

0

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

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

foreach($xpath->query('//img/@alt') as $node){ 
    echo $node->nodeValue."\n"; 
} 
+0

Спасибо, это работает. С | в качестве разделителя он возвращает: '1 | 3 | .5 | statusB | 8 | 5 | .0 |'. Но как я могу получить это значение в строку? Мне нужно это, чтобы разбить его на 3 строки, используя взрыв. – JERO79

+0

Решено использовать: foreach ($ xpath-> query ('// img/@ alt') как $ node) { $ input [] = $ node-> nodeValue; } – JERO79

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