Получить текст после иглы? - PullRequest
1 голос
/ 07 февраля 2010

Если бы у меня был следующий текст в строке:

<h4>Tom</h4>
<p>One Paragraph</p>
<p>Two Paragraph</p>

Какой код мне понадобится проанализировать в этой строке, чтобы получить такой вывод (если я не знал, что было внутри тега <h4>?

 <p>One Paragraph</p>
 <p>two Paragraph</p>

Спасибо!

Ответы [ 3 ]

10 голосов
/ 07 февраля 2010

Вы можете использовать strstr, чтобы получить подстроку, начинающуюся с </h4>, и удалить </h4> с substr:

$needle = '</h4>';
$rest = substr(strstr($string, $needle), strlen($needle));

Начиная с PHP 5.3, вы также можете указать третий параметр before_needle с true :

$rest = strstr($string, $needle, true);

Другой способ - использовать explode:

list(,$rest) = explode($needle, $string, 2);
5 голосов
/ 07 февраля 2010

Используйте stripios , чтобы получить начало </h4>. Добавьте длину </h4> к смещению и затем используйте substr , чтобы получить весь текст после смещения.

Пример:

$str = '....Your string...';
$offset = stripos($str, '</h4>');
if ( $offset === false ){
    //error, end of h4 tag wasn't found
}
$offset += strlen('</h4>');
$newStr = substr($str, $offset);

Я должен отметить, что если HTML становится более сложным или вы не контролируете HTML, вы можете использовать HTML-парсер . Он гораздо надежнее и с меньшей вероятностью потерпит неудачу, если он (например) встретит < /h4 >, а не </h4>. Однако в этом случае это излишне.

1 голос
/ 07 февраля 2010

Если пример размещенного вами HTML-кода не является особенно представительным для вашего набора данных, вам может быть проще и надежнее использовать HTML-анализатор, такой как этот .

Общеизвестно, что HTML трудно надежно (технически невозможно) с регулярными выражениями, и синтаксический анализатор даст вам очень простой способ найти интересующие вас узлы.

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

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