答案 0 :(得分:1)
如何使用
之类的东西\\(('|\")(.*?)\\1\\)
或者甚至可以在
之前添加url
url\\(('|\")(.*?)\\1\\)
\\1
代表第1组的匹配,只能是'
或"
。在这里使用它是为了确保在括号之前和之后我们有相同的引用。
此正则表达式会将../../footer/right.png
部分放在第2组中,因此您可以使用matcher.group(2)
来获取它。
示例:
String data = "background: url('../../footer/right.png') repeat;\r\n" +
"\r\n" +
"background: url(\"../../footer/left.png\") repeat;";
Pattern p = Pattern.compile("\\(('|\")(.*?)\\1\\)");
Matcher m = p.matcher(data);
while (m.find())
System.out.println(m.group(2));
输出:
../../footer/right.png
../../footer/left.png
答案 1 :(得分:0)
尝试使用String.split()
String urlStr = "background: url('../../footer/right.png') repeat;";
String url = urlStr.split("'")[1];
System.out.println(url);
输出
../../footer/right.png
答案 2 :(得分:0)
您可以使用(为您需要的报价添加转义)
(?|'([^']*)'|"([^"]*)")
您的答案将在第一个捕获的组中(感谢(?|...|...)
,用于重置捕获组索引)
答案 3 :(得分:0)
试试这个:
url\([\'|\"](.+)[\'|\"]\)
因为Java字符串将是:
"url\\([\\'|\\\"](.+)[\\'|\\\"]\\)"
答案 4 :(得分:0)
看看你的正则表达式的这一部分:
[('|("|(|'|"]
(我已经在Java字符串文字中删除了你需要的反斜杠。)当你在一个正则表达式中有[]
括起来的一组字符时,效果是匹配一个必须在集合中的字符。因此,[abc]
匹配一个可以是'a'
,'b'
或'c'
的字符。它永远不会匹配多个字符的序列。还有其他功能,例如使用^
,因为第一个字符意味着匹配集合中的字符而不是,并且有方法可以指定整个字符类,例如\d
数字。
但是,您似乎正在尝试使用它来匹配多字符序列,即您在字符串中查找('
或("
。您不能使用[]
构造。您编写它的方式,它将匹配一个(
,'
,|
或"
字符。