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

标签 java css regex

我正在解析 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/

相关文章:

mysql - 从 Java 到 mysql 的正则表达式转换为 '?:'

java - 如何在 Android 软键盘上获取 '.' 点字符 KeyPressEvent

java - Grails - 无法从 Controller 调用服务 --> 总是得到 "Cannot invoke method on null object error"

html - 如何在屏幕中央显示消息框?

php - Notepad++::查找非特定格式的行

php - 将 "//"注释与正则表达式匹配但不在引号内

java - 如何管理用户身份验证/ session ?

java - 我无法让 Android XML 布局左侧的图像正确显示。我在这里做错了什么?

html - table 在中间

css - material-ui中的设备宽度和高度