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.