申し訳ありませんが、私の脳は揚げられています。私は一人で正しいすでに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_\\([^\\)]*\\)(--)?$";
は、その文字列が
--
で終わるかどうかを見るとそうでないものだけを置き換えます
ありがとうございます。以前の$ 0での試みはしなかったが、そのトリックをした。それ以外はどうしたらいいのか分かりませんが、私は頭を痛めつけていますが、極端な疲労までチョークして、これを終わらせます。最もエレガントでよく説明されたものとしてこれを受け入れます(しかし、他の人に感謝します)。 –