2012-02-15 10 views
1

申し訳ありませんが、私の脳は揚げられています。私は一人で正しいすでにJava replaceAll regexと同様の結果が得られます

--Boundary_([ThisOneWasFine])-- 

ラインを残しつつ、より適切な

--Boundary_([ArbitraryName])-- 

線で間違った

--Boundary_([ArbitraryName]) 

ラインを交換することにより、不良の境界といくつかのEMLsを修正しようとしています。私はString内のメッセージ全体を持っています(これは醜いですが、JavaMailはこれらを解析しようとすると死んでしまいます)、replaceAllを実行しようとしています。ここに私が得ることができる最も近いものがある。

//Identifie bondary lines that do not end in -- 
String regex = "^--Boundary_\\([^\\)]*\\)$"; 
Pattern pattern = Pattern.compile(regex, 
    Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); 
Matcher matcher = pattern.matcher(targetString); 
//Store all of our unique results. 
HashSet<String> boundaries = new HashSet<String>(); 
while (matcher.find()) 
    boundaries.add(s); 
//Add "--" at the end of the Strings we found. 
for (String boundary : boundaries) 
    targetString = targetString.replaceAll(Pattern.quote(boundary), 
     boundary + "--"); 

これは

--Boundary_([WasValid])---- 

と有効

--Boundary_([WasValid])-- 

ラインのすべてを置き換えるの明白な問題は、しかし、これは私も交換を行うために得ているだけでセットアップされています。 Pattern.quote(boundary)をPattern.quote(boundary)+ "$"に変更しようとすると、何も置き換えられません。 2つのループの代わりにmatcher.replaceAll( "$ 0--")を使用すると、何も置き換えられません。私の目標を達成するためのエレガントな方法と、それがなぜ機能するのですか?

String regex = "^--Boundary_\\([^\\)]*\\)(--)?$"; 

は、その文字列が --で終わるかどうかを見るとそうでないものだけを置き換えます

答えて

1

find()との一致を繰り返す必要はありません。それはreplaceAll()の一部です。置換文字列内の

s = s.replaceAll("(?im)^--Boundary_\\([^\\)]*\\)$", "$0--"); 

$0は、正規表現は、この繰り返しでマッチしたものは何でもプレースホルダです。

正規表現の冒頭の(?im)は、CASE_INSENSITIVEとMULTILINEモードを有効にします。

+0

ありがとうございます。以前の$ 0での試みはしなかったが、そのトリックをした。それ以外はどうしたらいいのか分かりませんが、私は頭を痛めつけていますが、極端な疲労までチョークして、これを終わらせます。最もエレガントでよく説明されたものとしてこれを受け入れます(しかし、他の人に感謝します)。 –

0

あなたはこのような何かを試すことができます。

0

と仮定すると、すべての文字列が自身のライン上にあるこの作品: "(?im)^--Boundary_\\([^)]*\\)$"

スクリプト例:

String str = "--Boundary_([ArbitraryName])\n--Boundary_([ArbitraryName])--\n--Boundary_([ArbitraryName])\n--Boundary_([ArbitraryName])--\n"; 
System.out.println(str.replaceAll("(?im)^--Boundary_\\([^)]*\\)$", "$0--")); 

編集:JavaScriptからJavaへ変更し、速すぎて読んでいなければなりません(感謝を。それを指摘するため)

+0

JavaScriptスクリプトエンジンを使用することをお勧めしますか? –

関連する問題