删除在文本之前出现的所有超链接(Wikipedia转储)

时间:2015-03-12 12:58:55

标签: php regex preg-replace preg-match wikipedia-api

我正在开发维基百科转储,以找到与第一段中出现的第一句相关的一些有用信息。转储是高度非结构化的,因为它们已将几乎所有信息保存在一列中。他们使用符号组合来识别文本将如何显示,就像某些单词被写为'''单词'''时它会显示为粗体。相同的情况是超链接,他们使用[[]]进行超链接。现在,因为我想要第一段的第一句话(包括超链接)我需要删除所有不代表文本的额外信息。我是这样做的

 preg_replace("#\{{.*?}\}#s","", $text)

示例文本(来自维基百科转储):

{{Ver desambig}}
{{Mais notas||ci|data=janeiro de 2013}}
{{Info/Taxonomia}}
[[Ficheiro:Pêra amarela.JPG|thumbnail|upright]] //image link which i don't want

A {{AO-pAO|pera|pêra}} é o fruto comestível da pereira, uma [[árvore]] do. //first sentence of first paragraph

我剥离了所有{{}}所以我只剩下:

[[Ficheiro:Pêra amarela.JPG|thumbnail|upright]]
A {{AO-pAO|pera|pêra}} é o fruto comestível da pereira, uma [[árvore]] do.

现在,如果您看到这里有两个超链接(超链接由[[]]表示)。我想保留第一句话中出现的那个,即árvore但我不希望在此之前有[[]]的任何序列。我尝试从文本中删除[[]],但也删掉了árvore,这是我不想要的。

P.S:在第一句开头之前可能有多个超链接。可以通过正则表达式完成吗?我正在使用PHP。感谢

2 个答案:

答案 0 :(得分:1)

使用下面的正则表达式,然后用空字符串替换匹配的字符。

(?s)^(?:\s*{{.*?}}|\s*\[\[.*?]])*\n?
DOTALL模式^中的

(?s)匹配第一行的开头。

DEMO

答案 1 :(得分:1)

您可能希望使用wiki语法解析器并根据需要进行修改。

http://www.mediawiki.org/wiki/Alternative_parsers