PHP RegularExpression Регулярное выражение :сопоставьте что угодно (включая пробелы)

StackOverflow https://stackoverflow.com/questions/1871806

Вопрос

text text text
text text text

{test}
    content
    content
    content
{/test}

text text text
text text text

мне нужно получить два отдельных результата из приведенной выше строки:
1.

{test}
    content
    content
    content
{/test}

2.

    content
    content
    content

итак, какими должны быть эти два отдельных шаблоны регулярных выражений для PHP чтобы получить два вышеуказанных результата

Это было полезно?

Решение

Как насчет чего-то вроде этого :

$str = <<<STR
text text text
text text text

{test}
    content
    content
    content
{/test}

text text text
text text text
STR;

$m = array();
if (preg_match('#\{([a-zA-Z]+)\}(.*?)\{/\1\}#ism', $str, $m)) {
    var_dump($m);
}

Который получит такой результат :

array
  0 => string '{test}
    content
    content
    content
{/test}' (length=50)
  1 => string 'test' (length=4)
  2 => string '
    content
    content
    content
' (length=37)

Итак, в $m[0] у вас есть вся согласованная строка (т.е. теги + контент), и в $m[2] вам нужно только размещать содержимое между тегами.

Обратите внимание, что я использовал "общие" теги, а не конкретно "test" ;вы можете изменить это , если у вас будет только "test" метки.

Для получения дополнительной информации вы можете ознакомиться, по крайней мере :

Другие советы

Чтобы зафиксировать теги и содержимое вместе:

/(\{test\}[^\x00]*?\{\/test\})/

Чтобы зафиксировать только содержимое:

/\{test\}([^\x00]*?)\{\/test\}/
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top