从replaceAll中取代替换变量

时间:2017-03-02 14:53:05

标签: java regex

我有一个大字符串,我想从该字符串中获取链接。我可以打印链接。

delete tiko from app_files tiko
    . . .;

使用该代码。示例输出:

 Pattern pattern = Pattern.compile(".*(?<=overlay-link\" href=\").*?(?=\">).*");

当我尝试string.replaceAll时,正则表达式删除链接并打印另一个变量。

<a title="TITLE" class="overlay-link" href="LINK HERE"></a>

我是正则表达式的新手。你能救我吗?

以下是完整代码:

EX: <a title="TITLE" class="overlay-link" href=""></a>

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的问题,您只想提取href标记中指定的链接。

为此,您应该在正则表达式中使用捕获组,而不是尝试替换所有。

replaceAll方法正在准确地找到链接并将其替换为空字符串,并根据docs返回完整的结果字符串,这不是所需的结果。

你应该使用的正则表达式是这样的:.*(?<=overlay-link\" href=\")(.*?)(?=\">).*注意链接周围的捕获组()。

这将允许您查找匹配并访问捕获组1.我找到了一个很好的示例,说明如何在其他question中执行此操作。 (下面粘贴的重要片段)

String line = "This order was placed for QT3000! OK?"; //<a> tag string
Pattern pattern = Pattern.compile("(.*?)(\\d+)(.*)"); //insert regex provided above
Matcher matcher = pattern.matcher(line);
while (matcher.find()) {
    System.out.println("group 1: " + matcher.group(1)); //This will be your link
    System.out.println("group 2: " + matcher.group(2));
    System.out.println("group 3: " + matcher.group(3));
}

我添加的评论

注意:索引0代表整个Pattern