我正在尝试获取以下字符串的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>[^)]+)\)
我似乎无法阻止/忽略最后一句话......
答案 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\\((.[^)]*)\\)