我有一個字符串s
和一個正則表達式。我希望用替換字符串替換s
中的正則表達式的每個匹配項。替換字符串可能包含一個或多個反斜槓。要執行替換,我使用的是Matcher
的appendReplacement方法。匹配器的appendReplacement方法忽略替換的反斜槓
appendReplacement
的問題是,它忽略了它在替換字符串中遇到的所有反斜槓。所以,如果我嘗試用替換字符串"a\\b"
替換字符串"one match"
在子"match"
,然後appendReplacement
導致"one ab"
而不是"one a\\b"
*:
Matcher matcher = Pattern.compile("match").matcher("one match");
StringBuffer sb = new StringBuffer();
matcher.find();
matcher.appendReplacement(sb, "a\\b");
System.out.println(sb); // one ab
我已經採取了看看appendReplacement
的代碼,並且發現了它會跳過任何遇到的反斜槓:
if (nextChar == '\\') {
cursor++
nextChar = replacement.charAt(cursor);
...
}
如何將每個匹配替換爲包含反斜槓的替換字符串?
(*) - 請注意,在"a\\b"
中有一個反斜槓,而不是兩個。反斜槓只是逃脫。
'「a」+「\」+「b」'??????? – vks 2014-12-09 12:35:39
@vks:如果你問我的示例替換字符串是否是「」a「+」\「+」b「',那麼是的,除了'」\「'是非法的Java字符串,因爲你必須轉義反斜槓。 – snakile 2014-12-09 12:45:53
我實際上是在問這個替換工作是否有效:P – vks 2014-12-09 12:46:36