Что-то вроде этого:
$str = <<<STR
{{Title|Open
Bla-bla-bla
}}
STR;
$matches = array();
if (preg_match("/^\{\{([^\|]+)\|([^\n]+)(.*)\}\}$/s", $str, $matches)) {
var_dump($matches);
}
Это даст вам:
array
0 => string '{{Title|Open
Bla-bla-bla
}}' (length=28)
1 => string 'Title' (length=5)
2 => string 'Open' (length=4)
3 => string '
Bla-bla-bla
' (length=14)
Это означает, что после использования trim
на $matches[1]
, $matches[2]
и $matches[3]
вы получите то, что просили: -)
Объясняя регулярное выражение:
- совпадение с начала строки:
^
- два
{
символа, которые необходимо экранировать, поскольку они имеют особое значение
- все, что не является |, хотя бы один раз:
[^\|]+
- между
()
, поэтому он захвачен - возвращается как первая часть результата
|
тоже нужно убежать.
- a
|
символа - который должен быть экранирован.
- Все, что не является разрывом строки, хотя бы один раз:
[^\n]+
- между
()
, так что он тоже захвачен - вторая часть результата
.*
практически "что-нибудь" любое количество раз
- между
()
, так что он тоже захвачен - третья часть результата
- и, наконец, два
}
(тоже сбежал)
- и конец строки:
$
И обратите внимание, что регулярное выражение имеет модификатор s
(dotall) ; см. Модификаторы шаблонов , об этом.