2009-04-29 11 views
1

J'ai un classpath, quelque chose comme:Comment puis-je supprimer une sous-chaîne d'une chaîne avec une expression régulière?

myproject/classes;myproject/lib/somecrab.zip;myproject/lib/somelib1.jar;myproject/lib/somelib2.jar;myproject/lib/somelib3.jar; 

Maintenant, je voudrais nettoyer ce classpath et jeter somethings que je ne veux plus. Par conséquent, dans ce cas, le classpath devrait ressembler à

myproject/classes;myproject/lib/somelib1.jar;myproject/lib/somelib3.jar; 

Comment puis-je faire avec une expression régulière? Je veux le faire avec un ant-script, par ex.

<pathconvert property="new.classpath" pathsep=";"> 
    <path refid="old.classpath" /> 
    <chainedmapper> 
     <regexpmapper from="(.*).jar" to="\1.jar" /> 
    </chainedmapper> 
</pathconvert> 

Comment ai-je besoin d'adapter l'expression rationnelle? Merci beaucoup!

Répondre

0

Je pense que vous auriez besoin de phrase comme (validstuffbefore) skipstuff (validstuffafter), puis utiliser une chaîne de remplacement de \ 1 \ 2

donc (peut-être):

^([\w/]+;)((?:[\w/]+\.jar;)*)[\w/]+\.zip;?((?:[\w/]+\.jar;)*)$ 

et les remplacer par :

\1\2\3 

Vous pouvez avoir des problèmes avec plusieurs matches, mais l'indicateur global devrait résoudre ce problème.

Bonne chance!

1

Si tout ce que vous voulez faire est de se débarrasser d'une chaîne contiguë au milieu, il devrait juste être:

<regexpmapper from="(.*)myproject/lib/somecrab.zip;(.*)" to="\1\2" /> 
+0

+1 Pour les chaînes exactes, ce qui est beaucoup plus facile à entretenir que le mien. –

+0

J'ai essayé cela, mais malheureusement, cela ne fonctionne pas? Ma chaîne classpath revient vide ?! – blackicecube

Questions connexes