2013-11-21 2 views
2

Я перебираю список файлов внутри базового каталога, используя для библиотеки Ant-Contrib. Я хочу получить часть пути к файлу после базового каталога, но без имени файла.Ant Propertyregex часть пути к файлу

Например мой базовый каталог: C: \ Проекты \ Dev \ Main \ Sample игры \ JS У меня есть много JS скриптов и внутри этой папки и подпапок имя как

C:\projects\Dev\Main\Sample Game\js\simple\welcome\ss.js 
C:\projects\Dev\Main\Sample Game\js\hard\welcome\cc.js 
C:\projects\Dev\Main\Sample Game\js\easy\welcome\ee.js 

Я хочу, чтобы получить только \simple\welcome\. Я использую приведенный ниже код.

http://pastebin.com/TpqXBb27

<for param="filename"> 
    <path id="project.fileset"> 
     <fileset dir="${basedir}/js" includes="/*"> 
      <include name="**/*.js" /> 
     </fileset> 
    </path> 
    <sequential> 
     <basename property="[email protected]{filename}" file="@{filename}"/> 
     <propertyregex property="currentdirectory" 
      input="@{filename}" 
      regexp="${basedir}/js//([^//]*)//${[email protected]{filename}}" 
      select="\1" 
      casesensitive="false" 
      override="true" /> 
     <echo message="FullPath:@{filename}" /> 
     <echo message="Directory:${currentdirectory}" /> 
    </sequential> 
</for> 

Я не знаю, что регулярное выражение я должен предоставить там ... Я попытался с регулярным выражением ${basedir}/js//([^//]*)//${[email protected]{filename}}, но получаю ошибку ниже

java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence near index 3 
C:\projects\Dev\Main\Sample Game\js\simple\welcome\ss.js 

Пожалуйста, дать некоторые предложения для этого regex

+0

Я не вижу задачи, связанной с регулярным выражением, в вашем фрагменте, она просто тянет базовое имя. Однако regex. + \\ js (. + \\\) поймает \ simple \ welcome \ как группу 1 из C: \ projects \ Dev \ Main \ Sample Game \ js \ simple \ welcome \ ss.js – Rebse

ответ

2

Это скорее больше работы для pathconvert, а не propertyregex

<for param="filename"> 
    <path id="project.fileset"> 
     <fileset dir="${basedir}/js" includes="/*"> 
      <include name="**/*.js" /> 
     </fileset> 
    </path> 
    <sequential> 
     <basename property="[email protected]{filename}" file="@{filename}"/> 
     <!-- dirname strips off the trailing file name, leaving the full dir --> 
     <dirname property="[email protected]{filename}" file="@{filename}"/> 
     <pathconvert property="[email protected]{filename}"> 
      <file file="${[email protected]{filename}}" /> 
      <!-- pathconvert strips off the leading ${basedir}/js --> 
      <map from="${basedir}/js" to="" /> 
     </pathconvert> 
     <echo message="FullPath:@{filename}" /> 
     <echo message="Directory:${[email protected]{filename}}" /> 
    </sequential> 
</for> 
2

Проблема заключается в том, что вы на ПК, а также при использовании ${basedir}, это дает вам ${basedir} с обратной Windows, слэши для разделителей каталогов. <fileset/> делает то же самое.

Я столкнулся с этой самой ситуацией, и мне пришлось сначала сделать на моем пути, а затем выполнить свою замену. Вот код непосредственно из моего проекта:

  <var name="dest.name"    unset="true"/> 
      <var name="file.lastmodified"  unset="true"/> 
      <var name="file.type"    unset="true"/> 

      <file.mdate file="@{file}" 
      property="file.lastmodified"/> 

      <propertyregex property="file" 
      input="@{file}" 
      regexp="\\" 
      replace="/" 
      override="true" 
      defaultvalue="@{file}"/> 

      <propertyregex property="dest.name" 
      input="${file}" 
      regexp="^${fileset}/" 
      replace="" 
      override="true"/> 

Обратите внимание, что теперь я должен использовать <var/> дезактивировать свойства, так что я могу использовать их снова и снова в моей <for> цикла:

Первый regexreplace изменится

C:\projects\Dev\Main\Sample Game\js\simple\welcome\ss.js 

в

C:/projects/Dev/Main/Sample Game/js/simple/welcome/ss.js 

Оттуда вы можете использовать задачу basedir, чтобы удалить скрипт. Затем вам просто нужно найти каталог /js/.

<regexreplace property="currentdirectory" 
    file="@{file}" 
    regex=".*/js/(.*)" 
    select="\1" 
    override="true"/> 
Смежные вопросы