java - 用于捕获括号和/或引号之间的文本的正则表达式

标签 java regex

我有字符串:

background: url('../../footer/right.png') repeat;

background: url("../../footer/left.png") repeat;

我只想提取这样的 URL:

../../footer/right.png

../../footer/left.png

到目前为止我的正则表达式是

.*?[(\'|(\"|(|\'|\"](.*?)[\"|\'|)|\")|\')].*?

[[\\(\']([^\']*?)[\'\\)]]|[\\(\"]([^\"]*?)[\"\\)]|[\\(]([^)]*?)[\\)]|[\']([^\']*?)[\']|[\"]([^\"]*?)[\"]

但它一直给我

背景:url../../footer/izquierdo.png 重复;

为什么这样做以及正确的模式是什么?

编辑

在你的帮助下我找到了答案,但我不太知道为什么它有效

(?<=\\(|\'|\")(.*?)(?=\'|\"|\\))

任何人都知道为什么它可以匹配 ( (" (' ' " 的任意组合?

顺便说一句,这个匹配对我的逻辑来说是正确的(我没有提前提到,但他们确实这样做了)

感谢大家的帮助

最佳答案

使用类似的东西怎么样

\\(('|\")(.*?)\\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

关于java - 用于捕获括号和/或引号之间的文本的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22413585/

相关文章:

java - jenkins 无法执行目标 org.apache.maven.plugins :maven-release-plugin:2. 3.2:prepare (default-cli)

Java 11 字符串连接性能对比 Java 8

java - 数组索引越界二维数组

java - 正则表达式正向查找正则表达式反向匹配的后面?

java - 将 JDBC 与 Oracle DB 一起使用时,如何查找连接是否真的超时或凭据是否错误?

java - Spring 交易: Method with requires_new called from a method with requires

php - 需要匹配 “word1, word2, word3” 的正则表达式

python - 用python中的单词替换特殊字符

regex - “字符串匹配”在 'org-map-entries' 中不起作用

java - 这两个正则表达式有什么区别?