0

我尝试解析从 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]] ]]

我的问题是,如何修改正则表达式以获取第一个“[[”和最后一个“]]”之间的所有文本,而不计算所有“[”和“]”字符。

提前致谢

4

1 回答 1

2

由于您使用的是 PHP,因此您可能能够使用递归模式
考虑到您没有捕获任何内容:

/\[\[(((?>[^\[\]])|(?R))*)\]\]/U

请注意,我没有尝试过这个正则表达式,因为我无法使用 PHP。

编辑:

preg_match('/\[\[(?>[^\[\]]|(?R))*\]\]/U', '[[Bild:nameOfImage.png|image Description with a [[new wiki link]] ]]', $array);
var_dump($array);

似乎工作。

于 2013-03-28T15:50:17.470 回答