PHP: простая задача регулярных выражений - PullRequest
0 голосов
/ 12 сентября 2011

Некоторые из моих HTML-файлов содержат строку типа:

{foreach $any_kind_of_charaters}
Any kind of string including "\n\r" and spaces here
{/foreach}

Я хочу применить PHP's preg_match_all к ним и хочу вернуть хороший array, как напечатано ниже

Array
(
    [0] => {foreach $any_kind_of_charaters}
            Any kind of string including "\n\r" and spaces here
           {/foreach}
    [1] => any_kind_of_charaters
    [2] => Any kind of string including "\n\r" and spaces here
)

Этот РЕГЭКС: /\{foreach\s+\$(.*)\}\s+(.*)\s+\{\/foreach\}/ работает нормально для меня,
но происходит сбой, когда я добавляю новые строки (\ n) между тегами {foreach}{/foreach}.

Ваша помощь будет высоко ценится, спасибо.

Массив после использования модификатора "S"

Array
(
    [0] => {foreach $any_kind_of_charaters}
        Any kind of string including "\n\r" and spaces here
        {/foreach}
    [1] => any_kind_of_charaters}
        Any kind of string including "\n\r" and spaces here
    [2] => 
)

Взгляд second key из array содержит ненужные данные, а last key из array совершенно пуст.

1 Ответ

6 голосов
/ 12 сентября 2011

Установите флаг модификатора s в своем регулярном выражении.

http://php.net/manual/en/reference.pcre.pattern.modifiers.php


Примерно так: /\{foreach\s+\$(.*)\}\s+(.*)\s+\{\/foreach\}/s <- обратите внимание на модификатор </p>

...