我尝试解析我从xml wikipedia export
获得的Wikipedia XML在一种情况下,我需要提取所有图像路径。原始标记看起来像,
[[Bild:nameOfImage.png|image description]]
“Bild”也可以是“Image”,“File”或“Datei”
要提取图像的文本,请使用此正则表达式。
'|\[\[.*\|.*\]\]|U'
如果在图像描述中不是其他'[[..]]',则可以正常工作,例如
[[Bild:nameOfImage.png|image Description with a [[new wiki link]] ]]
我的问题是,我如何修改正则表达式以在第一个“[[”和最后“]]之间获取所有文字”而不计算所有“ ['an']'字符。
提前致谢
答案 0 :(得分:2)
由于您使用的是PHP,因此您可能可以使用recursive patterns 考虑到你没有抓到任何东西:
/\[\[(((?>[^\[\]])|(?R))*)\]\]/U
请注意,我没有尝试过这个正则表达式,因为我无法使用PHP。
修改强>
preg_match('/\[\[(?>[^\[\]]|(?R))*\]\]/U', '[[Bild:nameOfImage.png|image Description with a [[new wiki link]] ]]', $array);
var_dump($array);
似乎有效。