PHP RegularExpression Регулярное выражение :сопоставьте что угодно (включая пробелы)
-
18-09-2019 - |
Вопрос
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\}/