当前位置: 首页 > 面试题库 >

(Java)RegEx从CSS获取URL?

贺飞星
2023-03-14
问题内容

我正在解析CSS,以便从链接的样式表中获取URL。这是一个Java应用程序。( 我尝试使用CSSParser(
http://cssparser.sourceforge.net/
),但是,它在解析时会默默地删除许多规则。

所以我只是在使用Regex。我想要一个仅获取URL的正则表达式,并且足够健壮以应对来自狂野的真实CSS:

background-image: url('test/test.gif');
background: url("test2/test2.gif");
background-image: url(test3/test3.gif);
background: url   ( test4/ test4.gif );
background: url( " test5/test5.gif"   );

你明白了。这是在Java的regex实现中( 不是我的最爱 )。


问题答案:

正则表达式的问题在于它们有时过于严格,超出了您的需求。如果您向我们展示了您当前无法正常工作的正则表达式,我将能够为您提供更多帮助。

第一条评论:浏览器倾向于容忍 大多数 HTML / CSS错误(不是JavaScript,这是一种编程而非标记语言)。

您可以从background(-image)?令牌开始锁定第一部分。如何进行?非常困难…

总是带有冒号,因此您可以将其添加到令牌的常量部分,然后根据示例(而非CSS规范)判断出可变数量的空格,后跟url令牌。一个 可变数量
的空格的是[\w]*,这成为我们的正则表达式的一部分。

我用RegexBuddy尝试过

background(-image)?: url[\s]*\([\s]*(?<url>[^\)]*)\);

不幸的是,它捕获URL内的空格

Matched text: background-image: url('test/test.gif');
Match offset: 0
Match length: 39
Backreference 1: -image
Backreference 1 offset: 10
Backreference 1 length: 6
Backreference 2: 'test/test.gif'
Backreference 2 offset: 22
Backreference 2 length: 15

Matched text: background: url   ( test4/ test4.gif );
Match offset: 119
Match length: 39
Backreference 1: 
Backreference 1 offset: -1
Backreference 1 length: 0
Backreference 2:  test4/ test4.gif 
Backreference 2 offset: 138
Backreference 2 length: 18

因此,当您获得带有此URL的URL时,必须修剪字符串。从url示例4开始,我无法从组中排除空格,但是,它 应该与其中包含空格的URL匹配
,并且在没有%20test4.gif文件的情况下,此示例不正确。

[编辑]我更喜欢以下正则表达式版本

background(-image)?: url[\s]*\([\s]*(?<url>[^\)]*)[\s]*\)[\s]*;

容忍更多空白



 类似资料:
  • 问题内容: 我正在尝试在特定标签内获取文本。所以,如果我有: 我希望能够检索文本。 我正在尝试使用正则表达式。如果保持不变,我可以做到,但事实并非如此。 到目前为止,我有这个: 我认为最后两个部分-可以-但我不知道第一部分要做什么。 问题答案: 正如他们所说的,不要使用正则表达式来解析HTML。如果您知道这些缺点,则可以摆脱它。尝试 将遍历字符串中的所有匹配项。 它不会处理嵌套标签,并且会忽略标签

  • 此regex:使用多个组匹配表达式。regex的要点是它捕获两个成对的模式,其中regex的第一部分必须跟在regex的第二部分后面。 如何提取这两个组中的每一个? 这里的关键是regex匹配两次,每次包含2个组。我希望每个匹配都有一个它自己的列表,这个列表包含2个元素,每个组一个。

  • 问题内容: 有没有一种方法可以从HTML文件中获取CSS类?示例片段: 完美的输出将是: 尽管这样可以: 问题答案: BeautifulSoup本身根本不解析CSS样式声明,但是您 可以 提取这些部分,然后使用专用的CSS解析器对其进行解析。 根据您的需求,有多个CSS解析器可用于python。我会选择cssutils(需要python 2.5或更高版本(包括python 3)),它在支持方面是最

  • 我正在试图理解这个代码块。在第一个中,我们在表达式中寻找的是什么? 我的理解是,它是任何一个字符(0或多个*),后面跟0到9之间的任何一个数字(一个或多个+),后面跟任何一个字符(0或多个*)。 执行此操作时,结果为: 使用抓取群的好处是什么?

  • 问题内容: 我得到了此功能来获取cssPath: 但是我有这样的事情: 但是完全正确的是,它看起来应该像这样: 有人有任何想法简单地用javascript实现吗? 问题答案: 为了始终获得正确的元素,您将需要使用或来选择不能唯一标识元素的选择器。所以试试这个: 你可以添加一个例行检查在其对应的背景下独特的元素(如,,,等)。

  • 问题内容: 有人可以告诉我如何从网址中获取youtube ID,而不管该网址中还有哪些其他GET变量。 问题答案: 使用parse_url()和parse_str()。 (您几乎可以将正则表达式用于任何东西,但它们很容易出错,因此,如果有专门针对您要完成的功能的PHP函数,请使用它们。) parse_url接受一个字符串,并将其切成具有大量信息的数组。您可以使用此数组,也可以将所需的一项指定为第二