2010-02-07 7 views
4

J'ai un dictionnaire au format txt, qui ressemble à ceci:texte Parse utilisant des expressions régulières

term 1 
    definition 1 
    definition 2 

term 2 
    definition 1 
    definition 2 
    definition 3 
etc. 

Il y a un onglet toujours avant une définition, au fond, c'est comme ça:

term 1 
[tab]definition 1 
[tab]definition 2 
etc. 

maintenant, je dois envelopper chaque terme et il est avec des définitions <term> étiquette, à savoir:

<term> 
term 1 
    definition 1 
    definition 2 
</term> 

Je tentais utiliser des expressions régulières pour trouver un terme avec ses définitions, mais sans chance. Pourriez-vous s'il vous plaît m'aider avec cela?

Merci pour vos suggestions!

+1

Quelle implémentation langage/expression régulière utilisez-vous? – Gumbo

+0

J'utilise PHP 5.3.0 – Peterim

+0

Ne me dites pas que vous essayez de générer un fichier xml valide avec des expressions régulières. –

Répondre

0

Essayez cette expression régulière:

(^|\n).+(\n[ \t]+.+)* 

En supposant que ^ marque le début de la chaîne, \n est le caractère de saut de ligne et . ne correspond pas à des sauts de ligne.

0

En supposant une implémentation

  1. plusieurs correspondances lignes (/.../m)
  2. Utilise \A pour indiquer le début d'une ligne

ce qui devrait correspondre à un "terme":

\A[^\t][^\n]+\n(\t[^\n]+\n)+ 
0

Faire correspondre une ligne avec un premier caractère non-blanc suivi d'une ou plusieurs lignes avec les TAB principaux:

 
$ perl -0077 -pe 's/^(\S.+\n(^\t.+\n)+)/<term>\n$1<\/term>\n/mg' dict 
<term> 
term 1 
     definition 1 
     definition 2 
</term> 

<term> 
term 2 
     definition 1 
     definition 2 
     definition 3 
</term> 
Questions connexes