Как регулярное сопоставление текста с разными окончаниями? - PullRequest
1 голос
/ 02 апреля 2010

Это то, что у меня есть на данный момент.

<h2>Information</h2>\n  +<p>(.*)<br />|</p>
                  ^ that is a tab space, didn't know if there was
 a better way to represent one or more (it seems to work)

Я пытаюсь соответствовать «бла бла». текст, но мое текущее регулярное выражение не совсем работает, оно будет соответствовать большей части строки, но я хочу, чтобы оно совпадало с первым

<h2>Information</h2>
    <p>bla bla.<br /><br /><a href="http://www.google.com">google</a><br />

или

<h2>Information</h2>
    <p>bla bla.</p> other code...

Да, и мой php-код:

    preg_match('#h2>Information</h2>\n  +<p>(.*)<br />|</p>#', $result, $postMessage);                          

Ответы [ 4 ]

6 голосов
/ 02 апреля 2010

Не используйте регулярные выражения для анализа HTML. PHP предоставляет DOMDocument , который можно использовать для этой цели.

Сказав, что в вашем регулярном выражении есть ошибки:

  • Вам нужны скобки вокруг чередования.
  • Вам нужны ленивые модификаторы.
  • Вы не можете ввести 'header' для соответствия 'Information'.

С этими изменениями это будет выглядеть так:

<h2>.*?</h2>\n\t+<p>.*?(<br />|</p>)

Ваше регулярное выражение также очень хрупкое. Например, если ввод содержит пробелы вместо вкладок или конец строки выполнен в стиле Windows, ваше регулярное выражение не будет выполнено. Использование правильного анализатора HTML даст гораздо более надежное решение.

2 голосов
/ 02 апреля 2010

Используйте \s для сопоставления с любым символом пробела (включая пробелы, табуляции, переводы строки и т. Д.), Например

preg_match('#<h2>header</h2>\s*<p>(.*)<br />|</p>#', $result, $postMessage);  

Но, как уже упоминалось, не используйте регулярные выражения для разбора HTML.

1 голос
/ 02 апреля 2010

Попробуйте сделать совпадение non-greedy, используя (.*?) вместо (.*)

1 голос
/ 02 апреля 2010

. * Соответствие должно быть не жадным (соответствовать минимуму произвольных символов вместо максимума), то есть (. *?) Я думаю в PHP.

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