我正在维基百科转储上查找与第一段中出现的第一句话相关的一些有用信息。转储是高度非结构化的,因为它们将几乎所有信息都保存在一列中。他们使用符号组合来识别文本的显示方式,就像当某个单词被写成"单词"时,它会显示为粗体。超链接的情况相同,它们使用 [[ ]] 作为超链接。现在,由于我想要第一段的第一句话(包括超链接),我需要删除所有不代表文本的额外信息。我这样做是用
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。
PS:在第一句话开始之前可能有多个超链接。这可以通过正则表达式完成吗?我正在使用 php。谢谢
使用以下正则表达式,然后将匹配的字符替换为空字符串。
(?s)^(?:'s*{{.*?}}|'s*'['[.*?]])*'n?
^
在 DOTALL 模式下(?s)
,匹配第一行的开头。
演示
您可能希望使用 wiki 语法解析器并根据需要对其进行修改。
http://www.mediawiki.org/wiki/Alternative_parsers