Java正则表达式问题

Java正则表达式问题,java,regex,pattern-matching,Java,Regex,Pattern Matching,要求:字符串“richText”,可以包括纯文本+锚标记。锚标记被重写以修改其目标、追加JS等 问题: 模式匹配器find()&appendReplacement()工作正常,直到锚标记中没有特殊字符“$”。当$是锚标记的一部分时,它抛出一个异常 第1行修复了异常部分,但如果纯文本中存在“$”或“\”,则会产生问题,因为纯文本现在在上述2个特殊字符周围有额外的转义字符(bcoz of quoteReplacement())。如何从纯文本中去除额外的转义字符(撤消引号替换的影响) 方法:

要求:字符串“richText”,可以包括纯文本+锚标记。锚标记被重写以修改其目标、追加JS等

问题: 模式匹配器find()&appendReplacement()工作正常,直到锚标记中没有特殊字符“$”。当$是锚标记的一部分时,它抛出一个异常

第1行修复了异常部分,但如果纯文本中存在“$”或“\”,则会产生问题,因为纯文本现在在上述2个特殊字符周围有额外的转义字符(bcoz of quoteReplacement())。如何从纯文本中去除额外的转义字符(撤消引号替换的影响)

方法:

    String richText = Matcher.quoteReplacement(rText); //Line 1-escape characters   
    String anchorTagPattern = "<a[^>]*?href\\s*=[^>]*>(.*?)</a>";
    StringBuffer result = new StringBuffer(richText.length());
    Pattern pattern = Pattern.compile(anchorTagPattern);
    Matcher matcher = pattern.matcher(richText);
    while (matcher.find()) {
               String aTag = matcher.group();
               .......
               String formattedAnchorTag = rewriteTag(aTag);
               matcher.appendReplacement(result, formattedAnchorTag); ....
    }
    matcher.appendTail(result);
    //Plain text with $ \ has some additional escape characters because of Line 1. How    to remove them:
String richText=Matcher.quoteReplacement(rText)//第1行-转义字符
字符串anchorTagPattern=“”;
StringBuffer结果=新的StringBuffer(richText.length());
Pattern=Pattern.compile(anchorTagPattern);
Matcher-Matcher=pattern.Matcher(richText);
while(matcher.find()){
字符串aTag=matcher.group();
.......
String formattedAnchorTag=rewriteTag(aTag);
matcher.appendReplacement(结果,格式化锚定标记)。。。。
}
matcher.appendTail(结果);
//由于第1行的原因,$\的纯文本有一些额外的转义字符。如何删除它们:
输入的rText为

Plain text having $. Anchor tag to be rewritten is <a href=\"http://www.google.com\">google$</a>
包含$的纯文本。要重写的锚定标记为
如果对-quoteReplacement方法中的第1行进行了注释,则得到java.lang.IllegalArgumentException:非法组引用 位于java.util.regex.Matcher.appendReplacement(Matcher.java:724)

如果我离开它,异常将消失,但返回的字符串是

Plain text having \$. Anchor tag to be rewritten is <a href="http://www.google.com" target="_blank">google$</a>
具有\$的纯文本。要重写的锚定标记为

Matcher.quoteReplacement
不应在
rText
上调用。模式中的第一个问号似乎是多余的。只有
rewriteTag
可能是原因



在分配
richText
之后,但在创建
anchorTagPattern
之前,错误输入的
richText
是什么样子的?另外,错误输入的
rText
是什么样子的?这不重要。源文本可能包含$,但没有特殊意义。
formattedAnchorTag = Matcher.quoteReplacement(formattedAnchorTag);
matcher.appendReplacement(result, formattedAnchorTag);