Preg_Match извлекает все строки после поискового слова - PullRequest
0 голосов
/ 15 января 2019

У меня есть следующий ответ HTML:

   Your Balances: <br><br>Points Balance: 600.03<br>
   <br>Last Transaction(s)
   <br>01/11/2019 100050000000 Location1 $14.00
   <br>11/28/2018 100053700000 Location2 $10.50
   <br>10/03/2018 100051800000 Location3 $20.00
   <br>06/26/2018 100047400000 Location4 $17.50
   <br>06/04/2018 100046400000 Location5 $7.00
   <br>

Мне нужно использовать preg_match, чтобы извлечь весь текст под частью Last Transaction(s). Я попробовал следующее, но не могу получить весь текст:

preg_match('/Last.*Transaction\(s\)<br>((.)+)/',$input, $output);

но я получаю только одну строку 01/11/2019 100050000000 Location1 $14.00 назад.

Может ли кто-нибудь помочь в получении всего текста, как я указал выше?

1 Ответ

0 голосов
/ 16 января 2019

Вы можете сделать это с флагом \G следующим образом:

(?:                             # non-capturing group
    \G(?!\A)                    # match after the last match
    |                           # or
    \QLast Transaction(s)\E\s+  # Last Transactions(s) lit. + whitespaces
)
\s*<br>\K                       # whitespaces + <br>, 
                                # "forget what's been matched thus far (\K)"
(?P<value>.+)                   # capture anything in that line

См. демонстрацию на regex101.com (и имейте в виду модификаторы!), Но обратите внимание, что синтаксический анализ HTML (вложенные структуры в целом) считается плохой практикой. Если возможно, используйте парсер ее.

...