2016-06-13 8 views
1

私はreplaceregexpを使ってファイル内の特定の一致を置き換えています。 1つの行に複数の一致があるたびに、その行の最後のインスタンスだけが置き換えられます。Antは同じ行の複数のインスタンスを置き換えません

Eg: 
Input: 
    f1.lblTest.text != null && f1.lblTest.text != "" 
Reg EX: 
<replaceregexp file="mod1.js" match="(.*)f1(\.|\[&quot;)lblTest(\.|&quot;\]|\[&quot;)(.*)" replace="\1f1\2lblTestNew\3\4 \\/\\/Modified" flags="g"> 
Expected Output: 
    f1.lblTestNew.text != null && f1.lblTestNew.text != "" //Modified 
Actual Output: 
    f1.lblTest.text != null && f1.lblTestNew.text != "" //Modified 
With this <replaceregexp file="mod1.js" match="f1(\.|\[&quot;)$lblTest(\.|&quot;\]|\[&quot;)" replace="f1\1lblTestNew\2 \\/\\/Modified" flags="g"> I'm getting the below output 
f1.lblTestNew. //Modifiedtext != null && f1.lblTestNew. //Modifiedtext != "". 
With this <replaceregexp file="mod1.js" match="f1(\.|\[&quot;)$lblTest(\.|&quot;\]|\[&quot;)" replace="f1\1lblTestNew\2" flags="g"> I'm getting the below output 
f1.lblTestNew.text != null && f1.lblTestNew.text != "" This is ok but I really wanted a comment that lets the users know that this is modified and if they want they can modify again. 

解決策をご提案ください。

注:私はすでに 'byline'の有無にかかわらずg、m、sフラグを試してみましたが、うまくいきませんでした。

+0

両側に '(。*) 'があるために起こります。それらを削除し、置換パターンで後方参照を削除します。 $ lblTest(\。| " \] | \ [") "replace =" f1 \ 1lblTestNew \ 2 \\/\ "と入力してください。" ' –

+0

こんにちはWiktorはあなたの提案をお寄せいただき、ありがとうございます。この出力は 'f1.lblTestNew。 // Modifiedtext!= null && f1.lblTestNew。 // Modifiedtext!= ""。 '。私は '(。*)'が問題を引き起こしている理由を理解しました。私は、行の最後に// Modifiedを1回だけ必要としました。 '\\/\\/Modified'を削除すると正しく置き換えられ、出力は' f1.lblTeststudio1.text!= null && f1.lblTeststudio1.text!= "" 'ですが、' //変更されているので、ユーザーにとって便利なAntスクリプトによって修正されていることがわかっているので、必要に応じてユーザーが手動で再度修正することができます。助言がありますか? – Priyadarshini

+0

私は今、あなたが複数回置き換えることを理解しています。いくつかのテキストの*と*最後にテキストを追加します。見た目はややこしく見えますか?あなたの提案を 'f1 \ 1lblTestNew \ 2'で置換文字列として使用して、'/* Modified'コメントに別のルールを追加することはできませんか? '(。* f1(\。| \ [")lblTestNew | " \] | \ [")。*) '\ '// Modified'に置き換えられますか? –

答えて

1

あなたはno conditional replacement pattern support in Ant replaceregexpを持っているので、2つの段階関与する唯一の可能な解決策があります:すべてのlblTestlblTestNewとテキスト

  • が言う、文字列の末尾に//Modified部分文字列を追加交換する

    • <replaceregexp file="mod1.js" match="f1(\.|\[&quot;)$lblTest(\.|&quot;\]|\[&quot;)" replace="f1\1lblTestNew\2" flags="g">は、 <replaceregexp file="mod1.js" match="(.*f1(\.|\[&quot;)lblTestNew(\.|&quot;\]|\[&quot;).*)" replace="\1 // Modified">となります。
  • +1

    Wiktorに感謝します。最後に、この2ステップのプロセスに従わなければなりませんでした。 – Priyadarshini

    関連する問題