Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用正则表达式在括号内插入引号_Java_Regex - Fatal编程技术网

Java 如何使用正则表达式在括号内插入引号

Java 如何使用正则表达式在括号内插入引号,java,regex,Java,Regex,我有一个SVG标记字符串,其中包含以下内容的倍数: url(#586-xr___83_193_101__rgba_243_156_18_1__0-rgba_243_156_18_1__100) 我需要他们像这样: url('#586-xr___83_193_101__rgba_243_156_18_1__0-rgba_243_156_18_1__100') \((.*?)\) String str = "url(#586-xr___83_193_101__rgba_243_156_18_1

我有一个SVG标记字符串,其中包含以下内容的倍数:

url(#586-xr___83_193_101__rgba_243_156_18_1__0-rgba_243_156_18_1__100)
我需要他们像这样:

url('#586-xr___83_193_101__rgba_243_156_18_1__0-rgba_243_156_18_1__100')
\((.*?)\)
String str = "url(#586-xr___83_193_101__rgba_243_156_18_1__0-rgba_243_156_18_1__100)";
str = str.replaceAll("\\((.*?)\\)", "('$1')");

//Outuput: url('#586-xr___83_193_101__rgba_243_156_18_1__0-rgba_243_156_18_1__100')
括号内带引号


这些内容将混合在一个包含许多不同标记的长字符串中,因此需要非常准确。

ReplaceAll
删除字符串的一部分,并放置一个不相关且不变的新内容

因为替换字符串不能在两侧都相同,所以我想象的唯一解决方案(在使用RegEx和
ReplaceAll
的限制下)是在两次内完成:

String Str = "url(#586-xr___83_193_101__rgba_243_156_18_1__0-rgba_243_156_18_1__100)";
Str = Str.replaceAll("\\(", "('"); // replace left parenthesis
Str = Str.replaceAll("\\)", "')"); // replace right parenthesis

System.out.print("Return Value: " + Str);
// Return Value: url('#586-xr___83_193_101__rgba_243_156_18_1__0-rgba_243_156_18_1__100')

您可以测试它。

您可以使用如下正则表达式:

url('#586-xr___83_193_101__rgba_243_156_18_1__0-rgba_243_156_18_1__100')
\((.*?)\)
String str = "url(#586-xr___83_193_101__rgba_243_156_18_1__0-rgba_243_156_18_1__100)";
str = str.replaceAll("\\((.*?)\\)", "('$1')");

//Outuput: url('#586-xr___83_193_101__rgba_243_156_18_1__0-rgba_243_156_18_1__100')
使用替换字符串
(“$1”)

其思想是捕获括号内的所有内容,并将

因此,您可以使用如下代码:

url('#586-xr___83_193_101__rgba_243_156_18_1__0-rgba_243_156_18_1__100')
\((.*?)\)
String str = "url(#586-xr___83_193_101__rgba_243_156_18_1__0-rgba_243_156_18_1__100)";
str = str.replaceAll("\\((.*?)\\)", "('$1')");

//Outuput: url('#586-xr___83_193_101__rgba_243_156_18_1__0-rgba_243_156_18_1__100')

如果您想要性能更好的正则表达式,可以使用:

str = str.replaceAll("\\(([^)]*)\\)", "('$1')");

编辑你的问题而不是留下评论在你的问题下面有一个“编辑”链接…
newstring(“”
is)。@nickb,我修复了它。我的java有点生锈。好的,谢谢你的回复…如果有更好的方法,你不必使用regex和replaceAll?@frederico谢谢你的回复…它只需要对前面有url的括号执行,所以只需点击url()而不是rgb()@DavidJohnson我在你的示例中没有看到其他括号。不管怎样,我看到你接受了答案。希望能有所帮助我确实说过‘这些将混合在一个包含许多不同标记的长字符串中,因此需要非常准确。’所以在这个标记中是另一个parentheses@DavidJohnson对不起,我明白了。。。在这种情况下,您可以使用以下行:
str=str.replaceAll(“\\(.*)\”,“(“$1”)”
使正则表达式变得贪婪。请记住,此正则表达式将
url
视为最大的节点。如果这对您不起作用,那么就不能使用regex.str.replaceAll(“\(.*)”,“('$1')”)只获取整个字符串中的第一个和最后一个括号