Ben $ {1} = Başlık, $ {2} = Aç, $ {3} Bla-bla-bla = almak istiyorum.
itibaren
{{Title|Open
Bla-bla-bla
}}
Ne bu böyle bir şey:
$str = <<<STR
{{Title|Open
Bla-bla-bla
}}
STR;
$matches = array();
if (preg_match("/^\{\{([^\|]+)\|([^\n]+)(.*)\}\}$/s", $str, $matches)) {
var_dump($matches);
}
Seni alırsınız:
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)
Kullandıktan sonra trim on $matches[1], $matches[2], ve $matches[3], sen :-) istedi ne alırsınız, anlamına gelir
Explaining the regex :
^{ karakter,[^\|]+
() bu yüzden esir oluyor arasında - sonucu ilk parçası olarak döndü| da kaçtı zorundadır.| karakter - kaçtı zorundadır.[^\n]+
() yüzden arasında çok yakalanan oluyor - Sonuç ikinci bölümü.* virtually "anything" anynumber of times
() yüzden arasında çok yakalanan oluyor - sonucunun üçüncü bölümü} (escaped, too)$Ve regex s (dotall) değiştirici vardır unutmayın; Pattern Modifiers, bu konuda bkz.
http://www.gskinner.com/RegExr/
oynamak ve Regexes öğrenmek için yararlı bir yer.
Perl:
/\{\{ # literal opening braces
(.*?) # some characters except new line (lazy, i. e. as less as possible)
\| # literal pipe
(.*?) # same as 2 lines above
\n # new line
([\s\S]*?) # any character, including new line (lazy)
\}\}/x; # literal closing braces
Daha kesin bir çözüm yapma alanlarınızı çıkarılması için istediğiniz ne kesin kurallar bağlıdır.