Получить текст между тегом html и конкретным символом

0

В следующей строке мне нужно извлечь только 2014-04-19, используя php и regex с preg_match

 ...</abbr></td><td><abbr class="dtend" title="2014-04-19T00:00:00+00:00">19 Apr 2014</abbr></td></tr>...

Строка preg_match и regex, которую я использую:

preg_match("/class=\"dtend\" title=\"(.*)\"\>/i", $str,$str2);

Строка, которую я получаю:

2014-04-19T00:00:00+00:00

После "T" числа (время), очевидно, являются случайными. Я не очень опытный, ни новичок, но на самом деле не могу решить проблему. Можете ли вы дать предложение/какую-то помощь?

  • 1
    Ну, исходя из инстинкта, вы можете разделить на заглавную T и получить первый кусок. Что вам нужно сделать, зависит от всех возможных сценариев ввода, которые вы хотите обработать.
Теги:

4 ответа

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

Ваше регулярное выражение является неполным. Измените его так:

"/class=\"dtend\" title=\"(.*)T.*\"\>/i"

Таким образом, группа захвата захватывает только до первого T

  • 0
    Спасибо большое rvighne, очень хорошо работает
3

Можете использовать lookahead для удовлетворения T, есть много способов сделать это:

$pattern = '/class="dtend" title="\K[^"]+(?=T)/i';
  • \ K сбрасывает начало совпадения, которое затем будет в $out[0].
  • Б [^"]+, как charcters быть согласованы (+ один или несколько символов, которые не являются ")

Тест на regex101.com

Дополнительные сведения о регулярном выражении см. В разделе " Вопросы и ответы".

  • 1
    Мне нравится этот подход, не знал о \K
0

Зачем использовать выражение regelar в известной строке?

вы должны сделать что-то вроде этого -

$var = '<td>T<abbr class="dtend" title="2014-04-19T00:00:00+00:00">19 Apr 2014</abbr></td></tr>';

$string_to_search = 'class="dtend" title="';

$start = strpos($var, $string_to_search);

$var = substr($var,$start+strlen($string_to_search),10);

Это может выглядеть хуже, поскольку регулярное выражение делает это более простым способом, но пока вы знаете, что вы ожидаете, вы всегда должны использовать простые строковые функции вместо регулярного выражения.

0

вы можете использовать:

preg_match("/class=\"dtend\" title=\"([0-9\\-]+)[^\"]+\"\>/i", $str,$str2);

([0-9\\-]+) выберет любые числовые символы или - (ПРИМЕЧАНИЕ: из-за множественного экранирования вам может понадобиться использовать tree/four \ здесь)

[^\"]+ - пропустить все не " символы

Ещё вопросы

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