2011-02-17 4 views
0

J'écris une macro utilitaire qui consiste à vérifier si une liste séparée par des virgules list contient ou non une valeur particulière value.Attribut ANT dans le modèle regex

<macrodef name="csvcontains"> 
    <attribute name="value"/> 
    <attribute name="list"/> 
    <attribute name="casesensitive" default="false"/> 
    <sequential> 
    <condition property="matched" else="false"> 
     <matches string="@{list}" pattern="TODO" casesensitive="@{casesensitive}"/> 
    </condition> 
    </sequential> 
</macrodef> 

Je ne peux pas obtenir le droit le modèle, parce que je ne suis pas sûr de savoir comment échapper @{value} (et correspondre à un modèle séparés par des virgules).

Comment construire le motif?

Merci

Répondre

1

Avez-vous essayé? Je comprends que Ant résout toutes les variables dans une première étape, donc vous n'avez probablement pas à échapper @{value}

+0

Je recevais des erreurs mais j'ai découvert qu'ils ne sont pas liés à échapper: 'pattern =" (^ |, {\ s}) @ {valeur} ({\ s}, | { \ s} $) "'. C'est le modèle que j'essaie mais j'obtiens des erreurs près de la position 3 – alem0lars

+0

C'est les accolades autour de '\ s' - vous pouvez dire', {4} 'pour correspondre à 4 virgules mais en répétant une virgule" 's'-times "n'a aucun sens. –

+0

Ok. Merci. J'ai ouvert une nouvelle question pour la regex elle-même. ([ici] (http://stackoverflow.com/questions/5030340/ant-element-in-csv-matching)) – alem0lars

0

Je pense que votre problème est que @ et {signifient quelque chose dans les expressions régulières. Vous pouvez contourner ce problème en créant votre expression régulière dans une propriété, puis transmettre la nouvelle propriété à votre attribut de modèle. Il est un exemple:

<property name="versioning.official.build" 
      value="The Daily Build" 
      /> 
<property name="dollar.signs.mean.something.in.regexes" 
      value="^${versioning.official.build}_\d" 
      /> 
<condition property="versioning.checkin"> 
    <matches string="${versioning.build.name}" 
      pattern="${dollar.signs.mean.something.in.regexes}" 
      /> 
</condition> 
Questions connexes