如何将模式文本替换为其他文本包含基本文本的元素

时间:2012-04-03 11:28:36

标签: java regex

我想将一些文本替换为包含基本文本元素的其他文本。

例如:

text text
blabla HYPERLINK "mailto:x@x.com"x@x.com
text text

我想替换HYPERLINK "mailto:x@x.com"x@x.com to <a href="x@x.com">x@x.com</a>

所以结果应该是:

text text
blabla <a href="x@x.com">x@x.com</a>
text text

我怎样才能使用Java?

2 个答案:

答案 0 :(得分:2)

以下是你如何做到这一点:

String str = "text text\n" +
    "blabla HYPERLINK \"mailto:x@x.com\"x@x.com\n" +
    "text text";

str = str.replaceAll("HYPERLINK \\\"mailto:(.*?)\\\"\\1", "<a href=\"$1\">$1</a>");     
System.out.println(str);

编辑:

您可以从SO处使用的超链接降价处获取提示,并执行以下操作以获得更通用的解决方案:

String str = 
    "text text\n" +
    "blabla (mailto:x@x.com)[this email] or (mailto:x@y.com)[x@y.com]\n" +
    "text (http://www.google.com/)[this is google] text";

str = str.replaceAll("\\((.*?)\\)\\[(.*?)\\]", "<a href=\"$1\">$2</a>");       
System.out.println(str);

答案 1 :(得分:2)

这就是诀窍......(很好的挑战: - ))

public static void parse() {
    Pattern p = Pattern.compile("(.*)HYPERLINK \"mailto:(.*)\"(\\S*)(.*)");
    Matcher m = p.matcher("blabla HYPERLINK \"mailto:x@x.com\"x@x.com");
    if (m.matches()) {
        String processed = m.group(1) + "<a href=\"" + m.group(2) + "\">" + m.group(3) + "</a>" + m.group(4);
        System.out.println(processed);
    }
}