我正在解析 wikipedia API 和 API 响应,格式如下:
Lorem ipsum dolor sit amet, consectetur adipisicing [[elitaaa|elit]], sed do eiu
smod tempor incididunt ut labore et. Ut [[enim (enimaaddasd)|enima]] ad
minim veniam, [[some realllllly long word|quis]] [[ullamco|test]] laboris
iquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit
in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
我的目标是用“word”替换每个“[[long|word]]”。例如第一行应该是这样的:
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiu
我不关心“long”的内容(它可能包含所有字符,空格和()
),我只需要将括号中的内容替换为“word”。
我做了以下正则表达式:
$data = preg_replace(
'/\[\[([\s\S])\|(.*?)\]\]/',
'$2', $data);
但有时它会匹配整个段落,例如它替换
adipisicing [[elitaaa|elit]], sed do eiu smod tempor incididunt ut labore et.
Ut [[enim (enimaaddasd)|enima]] ad
with adipisicing enima ad
.. 我试着在{1,20}
后面加上[\s\S]
,但没有效果,因为“long”中的内容可以是一个完整的句子,也可以是单个5个字符的单词。