什么" abs:%s"正则表达式?

时间:2015-03-01 23:39:20

标签: java jsoup html-parser

我在我的项目中使用Jsoup,我试图了解HTMLparser.java中的这些代码行是一步一步的:

static List<LinkNode> toLinkNodeObject(LinkNode parentLink, Elements tagElements, String tag) {
    List<LinkNode> links = new LinkedList<>();
    for (Element element : tagElements) {
        if(isFragmentRef(element)){
            continue;
        }

        String absoluteRef = String.format("abs:%s", tag.contains("[") ? tag.substring(tag.indexOf("[") + 1, tag.length()) : "href");
        String url = element.attr(absoluteRef);

        if(url!=null && url.trim().length()>0) {
            LinkNode link = new LinkNode(url);
            link.setTag(element.tagName());
            link.setParentLink(parentLink);
            links.add(link);
        }
    }
    return links;
}

你能告诉我这行中的“abs:%s”正则表达式是做什么的吗?

 String absoluteRef = String.format("abs:%s", tag.contains("[") ? tag.substring(tag.indexOf("[") + 1, tag.length()) : "href");

1 个答案:

答案 0 :(得分:2)

假设标签具有以下值:

tag = "blah, blah, [medo0070";

然后是有问题的行

String absoluteRef = String.format("abs:%s", tag.contains("[") ? tag.substring(tag.indexOf("[") + 1, tag.length()) : "href")

将分配

abs:medo0070

到absoluteRef,因为标签变量包含&#39; [&#39;字符。如果tag有值

tag = "blah, blah, medo0070";

然后absoluteRef将被赋予值

abs:href

因为标签变量不包含&#39; [&#39;字符。

三元运算符(见这里:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html)的工作原理如下:

a ? b : c;

相当于

if (a) {
    b;
}
else {
    c;
}

在您的示例中,a是 tag.contains(&#34; [&#34;),b是 tag.substring(tag.indexOf(&#34; [& #34;)+ 1,tag.length())和c是&#34; href&#34;