【问题标题】:Java Regular Expression to find CSS import in HTML fileJava 正则表达式在 HTML 文件中查找 CSS 导入
【发布时间】:2013-12-18 21:53:40
【问题描述】:

我正在构建一个 Java 程序,它将网站的副本下载到本地计算机,同时保持原始文件层次结构。

我正在使用以下内容: 查找 http://www.w3schools.com/css/css_howto.asp 形式的 CSS(注意工作)

private static final String HTML_CSS_TAG_PATTERN = "\\s*(?i)href\\s*=\\s*(\"([^\"]*\")|'[^']*'|([^'\">\\s]+))";
private static final String CSS_TAG_PATTERN = "(?i)<link([^>]+)>(.+?)>";

要查找图像(工作正常):

private static final String HTML_IMG_TAG_PATTERN = "\\s*(?i)src\\s*=\\s*(\"([^\"]*\")|'[^']*'|([^'\">\\s]+))";
private static final String IMG_TAG_PATTERN = "(?i)<img([^>]+)>(.+?)>";

查找http://www.w3schools.com/html/html_links.asp 形式的链接(工作正常)

private static final String HTML_A_HREF_TAG_PATTERN = "\\s*(?i)href\\s*=\\s*(\"([^\"]*\")|'[^']*'|([^'\">\\s]+))";
private static final String HTML_A_TAG_PATTERN = "(?i)<a([^>]+)>(.+?)</a>";

链接和图片都可以正常工作,但 CSS 文件却不行。我希望它能提取到 CSS 文件的链接,以便我可以保存它。谁能帮我解决我错过的问题?

【问题讨论】:

  • 只使用像 jsoup.org 这样的 HTML 解析器有什么问题?为什么要尝试这种过于复杂且容易出错的方式?
  • 这是一个作业,我必须使用正则表达式

标签: java html regex


【解决方案1】:

尝试: CSS_TAG_PATTERN

<link[^>]+?text/css[^>]*?>

将匹配

<link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/stackoverflow/all.css?v=0eb8b68aff29">

【讨论】:

  • 它抛出以下错误:线程“main”中的异常 java.lang.IndexOutOfBoundsException:CSSRegEx.grabHTMLLinks(CSSRegEx. java:42) at HTML.main(HTML.java:63) 我认为这意味着它正在查找对 CSS 的引用,但 CSS_TAG_PATTERN 中仍然存在错误?
  • 第 1 组的预期是什么?
【解决方案2】:

为确保您只获得 CSS 样式表,请尝试遵循 CSS_TAG_PATTERN:

<link.*\s+rel="stylesheet"([^>]+)>

这个模式会匹配下面两个

    <link rel="stylesheet" type="text/css" href="theme.css">
    <link type="text/css" rel="stylesheet"  href="theme.css">

但不是

    <link type="text/css" rel="license"  href="someStuff">

【讨论】:

  • 我不确定你的意思。
【解决方案3】:

试试这个模式

<link[.]+?text/css[.]*?>

会匹配

<link rel="stylesheet" type="text/css" href="theme.css">
<link type="text/css" rel="stylesheet"  href="theme.css">
<link type="text/css" rel="license"  href="someStuff">

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 2013-11-10
    相关资源
    最近更新 更多