(Java)RegEx从CSS获取URL?

我正在解析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尝试过

I tried this with RegexBuddy

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

Unfortunately, it captures whitespaces inside URLs

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]*;

It tolerates more whitespaces

以上是 (Java)RegEx从CSS获取URL? 的全部内容, 来源链接: utcz.com/qa/406439.html

回到顶部