RegEx用于在括号和/或引号之间捕获文本

时间:2014-03-14 19:01:09

标签: java regex

5 个答案:

答案 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数字。

但是,您似乎正在尝试使用它来匹配多字符序列,即您在字符串中查找('("。您不能使用[]构造。您编写它的方式,它将匹配一个('|"字符。