2017-08-01 7 views
0

私はXMLを解析しているので、問題があります。Perl、文字列内の複数の一致を置き換えます。

return [ 
['measurement' : org.apache.commons.io.FileUtils.readFileToByteArray(new File('tab_2_1.png')), 
'kpi' : org.apache.commons.io.FileUtils.readFileToByteArray(new File('tab_2_2.png'))]] 

文字列はそのように見えることができますので、私は、ファイル形式、正規表現テンプレートのすべてのエントリを保存し、すべてのファイル名を交換する必要があります:

['measurement' : org.apache.commons.io.FileUtils.readFileToByteArray(new File('tab_2_1.png'))('tab_2_1.png'))('tab_2_1.png')), 

をし、XMLはそのことについて見えている、スクリプトを含むオブジェクトを持っています私はまだ私はこの正規表現を使用.png

前にすべてのimage_nameを交換する必要があります:.*\(\'(.*)\.png\'\)、 をそれがない人には、\n前の行にのみ最後の試合をキャッチ文字列。

この正規表現を修正するのに手伝ってもらえますか?

+0

名前を何に置き換える必要がありますか?私はそれが、すべての固定文字列ではなく、既存の名前から動的に導出されたものだと仮定します。 – zdim

答えて

2

問題は.*が欲張りです:それはすべてと一致しますできます。したがって、.*xは、xを含むすべての文字列であっても、最後の文字列の末尾にあるすべての文字と一致します(x)。あなたは?が最初.pngから.*マッチアップを行い

s/\('(.*?)\.png/('$replacement.png/g; 

非貪欲

を必要としています。パターンをファイル名に適切に区切るには、 \('が必要です。これは、示された例のファイル名を正しく置き換えます。 [^.]ない .で何かをマッチング、 否定文字クラスです

これを実行する別の方法は、\('([^.]*)\.pngです。 *数量詞で、それは再びすべての質問は、あなたが「はXMLをパース」ですが、私は心からそれがXML::TwigXML::LibXMLのようなライブラリとあることを願っています正確にどのように言っていない最初の.png


まで一致しました。正規表現で試してはいけません。このツールは仕事には不十分であり、あなたはそれについて知ることができます。このことについて、何年も前から多くのことが書かれています。

+0

はい、それはうまくいきました、ありがとう – genesi5

関連する問題