0

antcontrib のプロパティ正規表現を使用して部分文字列操作を実行しようとしています。これが私の元の文字列です:

COMPONENT:MYBuild:cat:cat

MYBuild上記の文字列から抽出しようとしています。

<propertyregex property="builderName"
     input="${componentLine}"
     regexp="(.*)COMPONENT:.*:"
     replace=""
     casesensitive="true"
     override="true"/>

しかし、これは私を取得しています

 COMPONENT:MYBuild:cat:

誰か助けてくれませんか?

4

2 に答える 2

0

正規表現の優れた点の1つは、を使用することです。これは、。[^x]以外の任意の文字を意味しますx。これは、正規表現の貪欲さを阻止する必要がある場合に最適です。たとえば[^:]*、次のコロンまでのすべての文字を選択することを意味します。

<propertyregex property="builderName"
     input="${componentLine}"
     regexp="[^:]*:([^:]*)"
     select="\1"
     override="true"/>

最初の[^:]*:一致COMPONENT:。これは、コロンを含まない文字列全体とそれに続くコロンに一致することを意味します。(これがどのように機能するかわかりますか?)

次の([^:]*)試合MyBuild。最初の例と似ていますが、コロンがないため、後続のコロンMyBuildは含まれません。撮りたいのでかっこで囲んでいます。

パラメータの代わりに、文字列全体を最初のキャプチャグループ(括弧内にあるもの)だけに置き換えたいと言うことができるパラメータをreplace使用します。select

私はこれをテストしていませんが、うまくいくか、少なくともあなたを正しい方向に向けるはずです。

于 2012-08-03T20:33:48.080 に答える
0

正規表現は必要ありません。アドオン Flakaを使用すると簡単です。

<project xmlns:fl="antlib:it.haefelinger.flaka">
 <property name="componentLine" value="COMPONENT:MYBUILD:cat:cat"/>
  <fl:let>
   builderName := split('${componentLine}', ':')[1]
  </fl:let>
  <echo>$${builderName} => ${builderName}</echo>
</project>

出力:

 [echo] ${builderName} => MYBUILD

Flaka には他の関数もあります。正規表現が必要な場合は、replace() を使用してください。詳細については、
Flaka のマニュアルを参照してください。

于 2012-08-03T16:53:17.337 に答える