Убрать все гиперссылки, которые появляются перед текстом (дамп Википедии)
Я работаю над дампом википедии, чтобы найти полезную информацию, связанную с первым предложением, которое появилось в первом абзаце. Дамп очень неструктурирован, поскольку почти все данные хранятся в одном столбце. Они используют комбинацию символов, чтобы распознать, как будет отображаться текст, например, когда какое-то слово написано как "слово", оно будет выделено жирным шрифтом. Та же самая ситуация с гиперссылками, они используют [[ ]] для гиперссылок. Теперь, когда я хочу первое предложение (включая гиперссылки) первого абзаца, мне нужно убрать всю дополнительную информацию, которая не представляет текст. Я сделал это с помощью
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, но я не хочу, чтобы какая-либо последовательность [[ ]] была до этого. Я пытался убрать [[ ]] из текста, но это тоже убирает из памяти, чего я не хочу.
PS: перед началом первого предложения может быть несколько гиперссылок. Можно ли это сделать с помощью регулярных выражений? Я использую php. Спасибо
2 ответа
Используйте приведенное ниже регулярное выражение, а затем замените соответствующие символы пустой строкой.
(?s)^(?:\s*{{.*?}}|\s*\[\[.*?]])*\n?
^
в режиме ДОТАЛ (?s)
, соответствует началу самой первой строки.
Возможно, вы захотите использовать синтаксический анализатор вики и изменить его для своих нужд.