RegEx, trovare parole indietro

Le regular Expression mi hanno sempre affascinato in modo particolare!
Oggi mi sono imbattuto in un problemino carino da risolvere e magari può essere di aiuto a qualcuno:

Scenario:
all’interno di un XML ho delle didascalie che in alcuni punti contengono la nomenclatura speciale del tipo <1986?>. Questo XML lo carico all’interno di un flash e quindi i caratteri “<” e “>” non vengono interpretati come caratteri ma tutto quel blocco viene interpretato come un TAG. Risulta quindi necessario convertire i due segni con &lt; e c &gt; (i relativi codici).

Esempio di stringa:
<tag_xml><![CDATA[<body>Immagine  8) Ritratto privato;<1986?></body>]]></tag_xml>

Devo andare ad isolare solo <1986?> e farlo diventare &lt;1986&gt;
Non posso cercare i carateri < e > poichè questi sono presenti in altri tag che devono rimanere tali.
Ho quindi deciso di rintracciare all’interno dell’xml, il testo ?> e recuperare l’intera parola precedente a quel punto. Isolo nella regex ile tre diverse parti (“<”, “1982″ e “?>”) e sostituisco la prima e l’ultima.

Ecco qua:
(<)(\d+(?=\?\>))(\?\>)

Con sostituzione:
&lt;$2&gt;

(Il segnaposto viene richiamato da alcuni software in maniera differente. $2 è il modo in cui TextMate su Osx richiama i segnaposti regex)
E il gioco è fatto!
 

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • LinkedIn
  • RSS
  • StumbleUpon
  • Twitter
  • Reddit

Post a comment