gpt4 book ai didi

java - (Java) RegEx 从 CSS 获取 URLs?

转载 作者:行者123 更新时间:2023-11-29 06:46:09 24 4
gpt4 key购买 nike

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

所以我只是在使用正则表达式。我想要一个只获取 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 的正则表达式实现(不是我最喜欢的)。

最佳答案

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

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

您可以从 background(-image)? 标记开始以锁定第一部分。如何进行?很难...

你总是有冒号,所以你可以添加到 token 的常量部分,然后,根据你的示例(而不是 CSS 规范)判断可变数量的空格,后跟 url token 。 可变数量的空格是[\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 时,您必须修剪字符串。在示例 4 中,我无法从 url 组中排除空格,但是,它应该匹配其中包含空格的 URL,而这不应该是正确的只要你没有 %20test4.gif 文件

,这个例子

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

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

它容忍更多的空格

关于java - (Java) RegEx 从 CSS 获取 URLs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4652777/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com