HTML-тег Regex Match и внутренний шаблон HTML [дубликаты]

0

Я очистил веб-страницу, и я пытаюсь извлечь данные из td, у которого нет класса или идентификаторов. Скажем, у меня есть следующий html:

<table> 
    <tr>
        <td>Title</td>
        <td>The Harsh Face of Mother Nature</td>
        </tr>
        .
        .
        .
</table>

Я пытаюсь сделать preg_match:

$title = preg_match("\(>Title)(.*?)(?=<\/td\>{2})\", $html);

Моя модель начинается с >Title а окончание - 2-е вхождение </td>.

Я работал с https://regex101.com/, чтобы попытаться понять это, но регулярное выражение действительно жесткое! Особенно с темными вещами, которые я пытаюсь выполнить. Любая помощь, пожалуйста? Благодарю!

(ниже). Цель состоит в том, чтобы получить жало: </td><td>The Harsh Face of Mother Nature затем сделать еще одно предварительное совпадение, чтобы удалить первую часть и получить конечный продукт The Harsh Face of Mother Nature

  • 0
    вы в порядке с анализом HTML-файлов с помощью регулярных выражений? Каков будет ваш ожидаемый результат?
  • 0
    Я помещаю правку внизу, чтобы объяснить мою цель / ожидаемый результат.
Показать ещё 1 комментарий
Теги:
web-scraping

4 ответа

1
Лучший ответ

Попробуйте другой метод: >Title.*?(?=<td>)<td>\K.*?(?=<\/td>)

$re = "/>Title.*?(?=<td>)<td>\\K.*?(?=<\\/td>)/s";
$str = "<table> \n <tr>\n <td>Title</td>\n <td>The Harsh Face of Mother Nature</td>\n <td>The Harsh Face of Mother Nature</td>\n </tr>\n .\n .\n .\n</table>";

preg_match_all($re, $str, $matches);

демонстрация

  • 0
    Это похоже на работу в regex101, спасибо. К сожалению, у меня проблема с превращением моего объекта $ crawler в строку, поэтому я не могу применить этот метод, пока не решу эту проблему. ( stackoverflow.com/questions/29267492/… )
0

используйте js n-е дочернее свойство, чтобы получить его

$( "table tr td:nth-child(2)" )
  • 0
    Я не могу, веб-страница имеет много-много таблиц, и каждая таблица заполняется динамически, поэтому не зная, сколько в ней строк.
0

Вы можете попробовать это регулярное выражение .*\<table\>\s*\<tr\>\s*\s*\<td\>title\<\/td>\s*\<td\>((\w*\s*\w*)*)<\/td>.* В первой группе будет записано содержимое <td>, следующего за <td>title</td>, который появляется после <table>.

0

Вы можете использовать следующее регулярное выражение в preg_match или preg_match_all

>Title.*?<\/td>.*?<td>\K.*?(?=<\/td>)

DEMO

$re = "/>Title.*?<\\/td>.*?<td>\\K.*?(?=<\\/td>)/s";
$str = "<table> \n <tr>\n <td>Title</td>\n <td>The Harsh Face of Mother Nature</td>\n </tr>\n .\n .\n .\n</table>";
preg_match_all($re, $str, $matches);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню