我正在解析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或多个*)。 执行此操作时,结果为: 使用抓取群的好处是什么?
问题内容: 有人可以告诉我如何从网址中获取youtube ID,而不管该网址中还有哪些其他GET变量。 问题答案: 使用parse_url()和parse_str()。 (您几乎可以将正则表达式用于任何东西,但它们很容易出错,因此,如果有专门针对您要完成的功能的PHP函数,请使用它们。) parse_url接受一个字符串,并将其切成具有大量信息的数组。您可以使用此数组,也可以将所需的一项指定为第二
问题内容: 我得到了此功能来获取cssPath: 但是我有这样的事情: 但是完全正确的是,它看起来应该像这样: 有人有任何想法简单地用javascript实现吗? 问题答案: 为了始终获得正确的元素,您将需要使用或来选择不能唯一标识元素的选择器。所以试试这个: 你可以添加一个例行检查在其对应的背景下独特的元素(如,,,等)。