Java正则表达式问题

标签 java regex pattern-matching

要求:字符串“richText”,可以包含纯文本+ anchor 标记。重写anchor标签,修改其target,追加JS等

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

第 1 行修复了异常部分,但如果“$”或“\”以纯文本形式出现,则会产生问题,因为纯文本现在有额外的转义字符上述 2 个特殊字符(quoteReplacement() 的 bcoz)。如何从纯文本中去除额外的转义字符(撤消 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:

输入的rText是

Plain text having $. Anchor tag to be rewritten is <a href=\"http://www.google.com\">google$</a>

如果方法中的 Line1-quoteReplacement 被注释,那么我会得到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>

最佳答案

不应在 rText 上调用

Matcher.quoteReplacement。模式中的第一个问号似乎是多余的。只有 rewriteTag 可能是原因。

<小时/>
formattedAnchorTag = Matcher.quoteReplacement(formattedAnchorTag);
matcher.appendReplacement(result, formattedAnchorTag);

关于Java正则表达式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9708738/

相关文章:

algorithm - 在字符串中查找部分子字符串

java - 接口(interface)的成员变量必须是最终的......为什么?

java - 后台线程抛出 HibernateException - "No Hibernate Session bound to thread..."

Javascript RegExp + 单词边界 + unicode 字符

javascript - 使用 Javascript 的正则表达式

haskell - 在 Haskell 中使用参数作为模式

javascript - ES2015 符号是否适合代替字符串作为唯一常量值?

Java - 将文本区域转换为字符串

java - 如何在 Java v1.8 中启用和使用密码套件 TLS_RSA_WITH_AES_128_CBC_SHA

regex - 301 将非 www 和 www 重定向到新域,但排除主页/root