Совпадение всего между двумя тегами с регулярными выражениями? - PullRequest
4 голосов
/ 13 ноября 2008

Как мне сопоставить (PCRE) все, что находится между двумя тегами?

Я пробовал что-то вроде этого:

<! - \ s * LoginStart \ s * -> (. *) <! - \ с * LoginEnd \ s * ->

Но это не сработало для меня ..

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

Спасибо

Ответы [ 3 ]

12 голосов
/ 13 ноября 2008
$string = '<!-- LoginStart --><div id="stuff">text</div><!-- LoginEnds -->';
$regex = '#<!--\s*LoginStart\s*-->(.*?)<!--\s*LoginEnds\s*-->#s';

preg_match($regex, $string, $matches);

print_r($matches); // $matches[1] = <div id="stuff">text</div>

объяснения:

(.*?) = non greedy match (match the first <!-- LoginEnds --> it finds
    s = modifier in $regex (end of the variable) allows multiline matches
        such as '<!-- LoginStart -->stuff
                 more stuff
                 <!-- LoginEnds -->'
1 голос
/ 13 ноября 2008

PHP и регулярные выражения? Вот несколько предложений:

'/<!--\s*LoginStart\s*-->(.*)<!--\s*LoginEnd\s*-->/Us'

Может быть и лучше - заглавная буква U делает регулярное выражение нежадным, что означает, что оно остановится на первом <!--, который может работать Но важным является s, который указывает регулярному выражению сопоставлять новую строку с символом ..

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

0 голосов
/ 18 ноября 2010

Я попробовал ответ Оуэна, но он не подходит для условий, подобных

<!-- LoginStart --><div id="stuff">text</div><!-- LoginEnds --><b>"DONT MIND THIS"</b><!-- LoginStart --><div id="stuff">text</div><!-- LoginEnds -->

Сюда также относится строка «НЕ МЕНЯЙТЕСЬ», то есть охватывает все содержимое первого <! - LoginStart -> и последний <! - LoginEnds -> тег

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