我想获得$ {1} =标题,$ {2} =开放,$ {3} = Bla-bla-bla。
这
{{Title|Open
Bla-bla-bla
}}
答案 0 :(得分:3)
$string = "{{Title|Open
Bla-bla-bla
}}";
preg_match('/^\{\{([^|]+)\|(.*?)[\r\n]+(.*?)\s*\}\}/', $string, $matches);
print_r($matches);
答案 1 :(得分:3)
这样的事情:
$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)
这意味着,在$matches[1]
,$matches[2]
和$matches[3]
上使用trim
后,您将获得所要求的内容: - )
解释正则表达式:
^
{
个字符,必须进行转义,因为它们具有特殊含义[^\|]+
()
之间,因此它被捕获 - 作为结果的第一部分返回|
也必须进行转义。|
字符 - 必须转义。[^\n]+
()
之间,因此它也被捕获 - 结果的第二部分.*
几乎“任何”任何次数
()
之间,因此它也被捕获 - 结果的第三部分}
(也已转义) $
请注意正则表达式具有s
(dotall)修饰符;见Pattern Modifiers,关于那个。
答案 2 :(得分:1)
http://www.gskinner.com/RegExr/
一个玩耍和学习正则表达式的有用场所。
答案 3 :(得分:0)
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
制定更精确的解决方案取决于您想要提取字段的确切规则。