亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? cssselectornodefilter.java

?? 本程序用于對(duì)頁面信息進(jìn)行提取并分析
?? JAVA
字號(hào):
// HTMLParser Library $Name: v1_6_20060319 $ - A java-based parser for HTML// http://sourceforge.org/projects/htmlparser// Copyright (C) 2004 Rogers George//// Revision Control Information//// $Source: /cvsroot/htmlparser/htmlparser/src/org/htmlparser/filters/CssSelectorNodeFilter.java,v $// $Author: derrickoswald $// $Date: 2005/05/15 11:49:04 $// $Revision: 1.6 $//// This library is free software; you can redistribute it and/or// modify it under the terms of the GNU Lesser General Public// License as published by the Free Software Foundation; either// version 2.1 of the License, or (at your option) any later version.//// This library is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU// Lesser General Public License for more details.//// You should have received a copy of the GNU Lesser General Public// License along with this library; if not, write to the Free Software// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA//package org.htmlparser.filters;import java.util.regex.Matcher;import java.util.regex.Pattern;import org.htmlparser.Node;import org.htmlparser.NodeFilter;import org.htmlparser.Tag;import org.htmlparser.util.NodeList;/** * A NodeFilter that accepts nodes based on whether they match a CSS2 selector. * Refer to <a href="http://www.w3.org/TR/REC-CSS2/selector.html"> * http://www.w3.org/TR/REC-CSS2/selector.html</a> for syntax. * <p> * Todo: more thorough testing, any relevant pseudo-classes, css3 features */public class CssSelectorNodeFilter implements NodeFilter{    /**     * Regular expression to split the selector into tokens.     */    private static Pattern tokens =        Pattern.compile("("            + "/\\*.*?\\*/"             // comments            + ") | ("            + "   \".*?[^\"]\""   // double quoted string            + " | \'.*?[^\']\'"   // single quoted string            + " | \"\" | \'\' "     // empty quoted string            + ") | ("            + " [\\~\\*\\$\\^]? = " // attrib-val relations            + ") | ("            + " [a-zA-Z_\\*](?:[a-zA-Z0-9_-]|\\\\.)* " // bare name            + ") | \\s*("            + " [+>~\\s] "        // combinators            + ")\\s* | ("            + " [\\.\\[\\]\\#\\:)(] "       // class/id/attr/param delims            + ") | ("            + " [\\,] "                     // comma            + ") | ( . )"                   // everything else (bogus)            ,            Pattern.CASE_INSENSITIVE            | Pattern.DOTALL            | Pattern.COMMENTS);    /**     * Comment token type.     */    private static final int COMMENT = 1;    /**     * quoted string token type.     */    private static final int QUOTEDSTRING = 2;    /**     * Relation token type.     */    private static final int RELATION = 3;    /**     * Name token type.     */    private static final int NAME = 4;    /**     * Combinator token type.     */    private static final int COMBINATOR = 5;    /**     * Delimiter token type.     */    private static final int DELIM = 6;    /**     * Comma token type.     */    private static final int COMMA = 7;    private NodeFilter therule;    private Matcher m = null;    private int tokentype = 0;    private String token = null;    /**     * Create a Cascading Style Sheet node filter.     * @param selector The selector expression.     */    public CssSelectorNodeFilter(String selector)    {        m = tokens.matcher (selector);        if (nextToken ())            therule = parse ();    }    /**     * Accept nodes that match the selector expression.     * @param node The node to check.     * @return <code>true</code> if the node matches,     * <code>false</code> otherwise.     */    public boolean accept (Node node)    {        return (therule.accept (node));    }    private boolean nextToken ()    {        if (m != null && m.find ())            for (int i = 1; i < m.groupCount (); i++)                if (null != m.group (i))                {                    tokentype = i;                    token = m.group (i);                    return true;                }        tokentype = 0;        token = null;        return (false);    }    private NodeFilter parse ()    {        NodeFilter ret;                ret = null;        do        {            switch (tokentype)            {                case COMMENT:                case NAME:                case DELIM:                    if (ret == null)                        ret = parseSimple ();                    else                        ret = new AndFilter (ret, parseSimple ());                    break;                case COMBINATOR:                    switch (token.charAt (0))                    {                        case '+':                            ret = new AdjacentFilter (ret);                            break;                        case '>':                            ret = new HasParentFilter (ret);                            break;                        default: // whitespace                            ret = new HasAncestorFilter (ret);                    }                    nextToken ();                    break;                case COMMA:                    ret = new OrFilter (ret, parse ());                    nextToken ();                    break;            }        }        while (token != null);        return (ret);    }    private NodeFilter parseSimple()    {        boolean done = false;        NodeFilter ret = null;        if (token != null)            do            {                switch (tokentype)                {                    case COMMENT:                        nextToken();                        break;                    case NAME:                        if ("*".equals(token))                            ret = new YesFilter();                        else if (ret == null)                            ret = new TagNameFilter(unescape(token));                        else                            ret = new AndFilter(ret, new TagNameFilter(unescape(token)));                        nextToken();                        break;                    case DELIM:                        switch (token.charAt(0))                        {                            case '.':                                nextToken();                                if (tokentype != NAME)                                    throw new IllegalArgumentException("Syntax error at " + token);                                if (ret == null)                                    ret = new HasAttributeFilter("class", unescape(token));                                else                                    ret                                    = new AndFilter(ret, new HasAttributeFilter("class", unescape(token)));                                break;                            case '#':                                nextToken();                                if (tokentype != NAME)                                    throw new IllegalArgumentException("Syntax error at " + token);                                if (ret == null)                                    ret = new HasAttributeFilter("id", unescape(token));                                else                                    ret = new AndFilter(ret, new HasAttributeFilter("id", unescape(token)));                                break;                            case ':':                                nextToken();                                if (ret == null)                                    ret = parsePseudoClass();                                else                                    ret = new AndFilter(ret, parsePseudoClass());                                break;                            case '[':                                nextToken();                                if (ret == null)                                    ret = parseAttributeExp();                                else                                    ret = new AndFilter(ret, parseAttributeExp());                                break;                        }                        nextToken();                        break;                    default:                        done = true;                }            }            while (!done && token != null);        return ret;    }    private NodeFilter parsePseudoClass()    {        throw new IllegalArgumentException("pseudoclasses not implemented yet");    }    private NodeFilter parseAttributeExp()    {        NodeFilter ret = null;        if (tokentype == NAME)        {            String attrib = token;            nextToken();            if ("]".equals(token))                ret = new HasAttributeFilter(unescape(attrib));            else if (tokentype == RELATION)            {                String val = null, rel = token;                nextToken();                if (tokentype == QUOTEDSTRING)                    val = unescape(token.substring(1, token.length() - 1));                else if (tokentype == NAME)                    val = unescape(token);                if ("~=".equals(rel) && val != null)                    ret = new AttribMatchFilter(unescape(attrib),                        "\\b"                        + val.replaceAll("([^a-zA-Z0-9])", "\\\\$1")                        + "\\b");                else if ("=".equals(rel) && val != null)                    ret = new HasAttributeFilter(attrib, val);            }        }        if (ret == null)            throw new IllegalArgumentException("Syntax error at " + token + tokentype);        nextToken();        return ret;    }    /**     * Replace escape sequences in a string.     * @param escaped The string to examine.     * @return The argument with escape sequences replaced by their     * equivalent character.     */    public static String unescape(String escaped)    {        StringBuffer result = new StringBuffer(escaped.length());        Matcher m = Pattern.compile("\\\\(?:([a-fA-F0-9]{2,6})|(.))").matcher(                        escaped);        while (m.find())        {            if (m.group(1) != null)                m.appendReplacement(result,                    String.valueOf((char)Integer.parseInt(m.group(1), 16)));            else if (m.group(2) != null)                m.appendReplacement(result, m.group(2));        }        m.appendTail(result);        return result.toString();    }    private static class HasAncestorFilter implements NodeFilter    {        private NodeFilter atest;        public HasAncestorFilter(NodeFilter n)        {            atest = n;        }        public boolean accept(Node n)        {            while (n != null)            {                n = n.getParent();                if (atest.accept(n))                    return true;            }            return false;        }    }    private static class AdjacentFilter implements NodeFilter    {        private NodeFilter sibtest;        public AdjacentFilter(NodeFilter n)        {            sibtest = n;        }        public boolean accept(Node n)        {            if (n.getParent() != null)            {                NodeList l = n.getParent().getChildren();                for (int i = 0; i < l.size(); i++)                    if (l.elementAt(i) == n && i > 0)                        return (sibtest.accept(l.elementAt(i - 1)));            }            return false;        }    }    private static class YesFilter implements NodeFilter    {        public boolean accept(Node n)        {return true;}    }    private static class AttribMatchFilter implements NodeFilter    {        private Pattern rel;        private String attrib;        public AttribMatchFilter(String attrib, String regex)        {            rel = Pattern.compile(regex);            this.attrib = attrib;        }        public boolean accept(Node node)        {            if (node instanceof Tag && ((Tag)node).getAttribute(attrib) != null)                if (rel != null                        && !rel.matcher(((Tag)node).getAttribute(attrib)).find())                    return false;                else                    return true;            else                return false;        }    }}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲日本成人在线观看| 亚洲精品大片www| 色噜噜狠狠色综合中国| 国产中文字幕一区| 亚洲成人av电影| 国产精品视频一二| 欧美第一区第二区| 91豆麻精品91久久久久久| 国产成人午夜视频| 久久国产麻豆精品| 亚洲成人精品影院| 亚洲欧美另类久久久精品2019| 26uuu成人网一区二区三区| 欧美日韩免费高清一区色橹橹| 成人app下载| 国产一本一道久久香蕉| 蜜桃av一区二区在线观看| 樱桃国产成人精品视频| 国产精品国产馆在线真实露脸| 日韩女同互慰一区二区| 欧美精品日韩综合在线| 在线看国产一区| 99热精品一区二区| 成人性视频网站| 国产成人午夜精品5599| 韩国av一区二区三区在线观看| 日韩影院免费视频| 日韩综合在线视频| 婷婷久久综合九色综合绿巨人| 亚洲综合在线五月| 亚洲品质自拍视频| 亚洲精品成人精品456| 国产精品久久久久久久久果冻传媒| 久久精品人人爽人人爽| 久久婷婷一区二区三区| 久久色在线观看| 久久婷婷色综合| 欧美激情一区二区三区蜜桃视频| 久久蜜桃av一区精品变态类天堂| 欧美mv和日韩mv国产网站| 欧美成人官网二区| 久久久久9999亚洲精品| 国产欧美精品一区aⅴ影院| 亚洲va欧美va天堂v国产综合| 亚洲欧洲99久久| 一区二区三区四区五区视频在线观看| 亚洲靠逼com| 亚洲成人免费在线观看| 日本成人超碰在线观看| 久久丁香综合五月国产三级网站| 久久97超碰国产精品超碰| 国产一区二区三区在线观看免费视频 | 欧美乱熟臀69xxxxxx| 欧美精品高清视频| 精品欧美久久久| 国产欧美视频一区二区| 国产精品久久影院| 夜夜嗨av一区二区三区中文字幕| 天天亚洲美女在线视频| 精品在线免费观看| 99re这里只有精品视频首页| 色激情天天射综合网| 日韩一级成人av| 精品va天堂亚洲国产| 国产精品午夜春色av| 亚洲精品成人天堂一二三| 日韩国产一区二| 国产毛片一区二区| 91久久精品一区二区三区| 日韩欧美成人午夜| 91蜜桃免费观看视频| 国产精品不卡一区| 亚洲综合偷拍欧美一区色| 蜜桃视频在线观看一区| 国产成人精品亚洲777人妖| 99国产欧美另类久久久精品| 91精品国产综合久久国产大片| 国产日韩欧美精品一区| 亚洲一区二区综合| 狠狠色丁香久久婷婷综合丁香| 99国产精品久久久久久久久久久| 欧美精品日韩精品| 国产欧美日韩三区| 一区二区三区在线视频免费| 偷拍与自拍一区| 成人高清视频免费观看| 91精品在线观看入口| 国产精品欧美久久久久无广告| 午夜电影久久久| 成人久久18免费网站麻豆| 欧美一区二区三区四区五区 | 中文字幕一区二区三区四区不卡| 亚洲国产成人av好男人在线观看| 一本久久综合亚洲鲁鲁五月天| 7777精品伊人久久久大香线蕉完整版 | 国产精品看片你懂得| 日韩激情一区二区| 97se亚洲国产综合自在线观| 精品国精品国产| 亚洲一区二区三区国产| 盗摄精品av一区二区三区| 制服丝袜av成人在线看| 亚洲激情一二三区| 丁香天五香天堂综合| 精品国免费一区二区三区| 午夜视频一区在线观看| 91蜜桃在线免费视频| 国产日韩欧美亚洲| 国产一区免费电影| 欧美一区二区日韩| 午夜不卡av在线| 欧美日韩在线播放| 一区二区三区欧美日韩| 成人激情动漫在线观看| 久久久亚洲精品石原莉奈| 男人的j进女人的j一区| 欧美日韩一级视频| 一区二区高清在线| 91影院在线免费观看| 国产精品美女久久久久高潮| 国产成人在线观看| 一区二区欧美精品| 99久久伊人精品| 欧美a级理论片| 韩日av一区二区| 亚洲美女免费视频| 不卡的av中国片| 国产精品三级在线观看| 国产夫妻精品视频| 久久久综合视频| 国产露脸91国语对白| 久久综合成人精品亚洲另类欧美 | 欧美在线你懂的| 一区二区视频在线看| 一本大道久久a久久精品综合| 亚洲日本在线看| 欧美中文字幕不卡| 亚洲二区视频在线| 69av一区二区三区| 蜜臀av一区二区在线观看 | 午夜a成v人精品| 91精品国模一区二区三区| 日韩激情一二三区| 精品国产99国产精品| 国产精品 欧美精品| 中文字幕一区二区三区蜜月| 93久久精品日日躁夜夜躁欧美| 一区二区三区日韩精品视频| 欧美亚洲丝袜传媒另类| 天天综合网天天综合色| 日韩欧美精品在线| 国产综合久久久久久鬼色 | 1024精品合集| 欧美性猛交xxxxxx富婆| 日本强好片久久久久久aaa| 欧美成人艳星乳罩| 成人午夜激情影院| 亚洲国产精品一区二区久久| 91精品国产入口| 国产成人av电影| 亚洲国产精品尤物yw在线观看| 日韩免费一区二区| 成人黄色电影在线 | 高清国产午夜精品久久久久久| 中文字幕在线观看一区| 欧美日韩成人综合在线一区二区| 美女www一区二区| 国产精品蜜臀在线观看| 欧美日韩一区不卡| 国产精品18久久久久| 亚洲国产色一区| 国产拍揄自揄精品视频麻豆| 在线精品视频一区二区三四| 久久99精品网久久| 一区二区三区精品| 亚洲精品一区在线观看| 91麻豆.com| 国产精一区二区三区| 亚洲国产日韩av| 欧美激情艳妇裸体舞| 欧美色窝79yyyycom| 国产69精品久久久久777| 天天色图综合网| 国产精品色一区二区三区| 欧美二区三区91| 99久久精品国产麻豆演员表| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产精品国产a级| 欧美mv和日韩mv的网站| 欧美性高清videossexo| 国产成人亚洲综合色影视| 日韩中文欧美在线| 亚洲精品ww久久久久久p站| 一区二区三区在线视频观看| 久久综合一区二区| 欧美美女直播网站| 91视频免费观看| 国产白丝精品91爽爽久久| 蜜臀a∨国产成人精品| 亚洲成人av在线电影|