2013-11-21 93 views
2

我正在循環使用Ant-Contrib庫的基本目錄內的文件列表。我想獲得基本目錄後文件路徑的一部分,但沒有文件名。Ant Propertyregex文件路徑的一部分

例如我的基本目錄爲:C:\項目\開發\ MAIN \樣品遊戲\ 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 

請給一些這方面的建議正則表達式

+0

我在你的代碼片段中看不到與正則表達式相關的任務,它只是拉取基本名稱。然而,正則表達式+ \\ js(。+ \\\)會從C:\ projects \ Dev \ Main \ Sample Game \ js \ simple \ welcome \ ss.js中捕獲\ simple \ welcome \ – 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

的問題是,你是在PC上,當你使用${basedir},它給你的${basedir}落後的Windows斜槓目錄分隔符。 <fileset/>也是這樣做的。

我遇到了這種情況,我必須先在我的路徑上執行regexreplace,然後進行替換。下面直接是將代碼從我的項目:

  <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"/>