2010-11-13 40 views
1

Comment puis-je dessiner seulement les mots dans [[words]] dans le tableau?Wikipedia liens regex en PHP

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

J'ai essayé \[\[.*]] mais il n » ai pas t travail, c'est peut-être parce que .* est seulement pour les chaînes anglaises.

+0

Assurez-vous que vous chargez vos fichiers texte dans le même encodage de caractères dans lequel ils ont été enregistrés. S'il a été enregistré dans Shift-JIS et que vous essayez de le charger en UTF-8, la chaîne sera effectivement impossible. – Andrew

+0

Avez-vous essayé d'utiliser un [parseur MediaWiki] (http://stackoverflow.com/questions/324758/open-source-parser-code-for-mediawiki-markup) au lieu d'une expression régulière? – Gordon

Répondre

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

Oui, le drapeau '/ u' est certainement utile, bien que je n'aie pas essayé cet exemple pour m'assurer que cela fonctionne ... –

+0

ouais, juste couru ceci - travaillant pour moi –

0

Vous devez backslash les deux côtés, tous les crochets doivent être échappés.

Cela a fonctionné en Python, peut nécessiter des modifications pour 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'] 

Hmm, peut-être que je me trompe d'avoir à échapper aux supports droit carrés, est avéré qu'il n'a pas été nécessaire en Python.

0

Vous pouvez encoder l'Unicode premier:

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

Un problème est que vous utilisez la avide générique: \[\[.*]] correspondra de la première à la dernière [[]], y compris toute intervention ]].

La plupart des moteurs regex maintenant également un nongreedy générique, généralement *? si \[\[.*?]] serait tout simplement correspondre à l'un wikilien à la fois.