正则表达式用于检索CSS url函数的参数

时间:2010-06-07 22:50:38

标签: c# css regex parsing

我正在尝试获取以下字符串的url部分:

url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)

所以images/ui-bg_highlight-soft_75_cccccc_1x100.png所需的部分。

目前我有这个:

url\((?<url>.*)\)

但是下面的例子似乎令人窒息:

url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30)

这导致images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30 ...

我想确保它支持尽可能多的变体(额外的空格等)。

谢谢!
Kieron

修改

此外,我需要忽略可选引号'或“...

现在,它看起来像这样:

url\(['|"]?(?<url>[^)]+)\)

我似乎无法阻止/忽略最后一句话......

4 个答案:

答案 0 :(得分:6)

这是由于*量词的贪婪,尝试一个否定的字符类而不是。

url\((?<url>[^)]*)\)

或者您可以使用惰性运算符

url\((?<url>.*?)\)

首选可能更好。

编辑:要忽略第二个引号,您需要使用像这样的延迟量词

url\(['"]?(?<url>[^)]+?)['"]?\)

您不在字符类中使用交替元字符|

答案 1 :(得分:1)

.*替换为[^\)]+

答案 2 :(得分:1)

这应该这样做:

url\(['"]?(?<url>.*?)['"]?\)

但是你可能想要允许可选的空格:

url\s*\(['"\s]*(?<url>.*?)['"\s]*\)

这也会匹配一些无效的字符串,但如果你的CSS有效,这应该不是问题。

更重要的是:|中的['|"]不作为OR运算符,它只匹配文字|。 OR隐含在字符类中。

答案 3 :(得分:0)

url \((。* \ .png)

url\\((.[^)]*)\\)