维基百科在PHP中链接正则表达式

时间:2010-11-13 06:36:24

标签: php regex unicode wikipedia

如何只将[[words]]中的单词绘制成数组?

  

[[旭川市|旭川]](文化) - [[アイヌ]]文化,[[旭川市旭山动物园|旭山动物园]]など

我尝试了\[\[.*]]但它没有用,也许是因为.*仅适用于英文字符串..

4 个答案:

答案 0 :(得分:2)

preg_match_all('/\[\[(.+?)\]\]/u',$str,$matches);
var_dump($matches);

答案 1 :(得分:0)

你需要反斜杠两面,所有方括号都需要转义。

这在Python中有效,可能需要修改PHP:


>>> re.compile('\[\[(.*?)\]\]')
<_sre.SRE_Pattern object at 0xb747ebf0>
>>> r=_
>>> r.search(text)
<_sre.SRE_Match object at 0xb7469560>
>>> r.findall(text)
['\xe6\x97\xad\xe5\xb7\x9d\xe5\xb8\x82|\xe6\x97\xad\xe5\xb7\x9d', '\xe3\x82\xa2\xe3\x82\xa4\xe3\x83\x8c', '\xe6\x97\xad\xe5\xb7\x9d\xe5\xb8\x82\xe6\x97\xad\xe5\xb1\xb1\xe5\x8b\x95\xe7\x89\xa9\xe5\x9c\x92|\xe6\x97\xad\xe5\xb1\xb1\xe5\x8b\x95\xe7\x89\xa9\xe5\x9c\x92']

嗯,也许我不得不逃避右方括号,结果证明在Python中没有必要。

答案 2 :(得分:0)

您可以先对Unicode进行编码:

[&#26093;&#24029;&#24066;&#26093;&#23665;&#21205;&#29289;&#22290;&#124;&#26093;&#23665;&#21205;&#29289;&#22290;&#93;&#93;&#12394;&#12393l]

答案 3 :(得分:0)

一个问题是您使用的是贪婪通配符:\[\[.*]]将匹配从第一个[[到最后一个]],包括任何干预{ {1}}。

现在,大多数正则表达式引擎都包含 nongreedy 通配符,通常为]],因此*?一次只能匹配一个wikilink。