[英]Regex for matching strings between '=' and '/' or "=" and end of string
我正在寻找可以帮助我替换字符串的正则表达式
source=abc/task=cde/env=it --> source='abc'/task='cde'/env='it'
更准确地说,我想替换一个以=
开头并以/
或字符串结尾为''
的字符串
试过这样的代码
"source=abc/task=cde/env=it".replaceAll("=(.*?)/","'$1'")
但这导致
source'abc'task'cde'env=it
使用前瞻和后视:
(?<==)([^/]*)((?=/)|$)
Lookbehind 允许您指定匹配之前的内容。 在这种情况下等于: (?<==)
。
我的正则表达式中的主要匹配项查找任何非斜线字符,零次或多次: ([^/]*)
Lookahead 允许您指定匹配后的内容。 在这种情况下,斜线: (?=/)
。
$
匹配行尾,因此测试数据中的最后一项被引用。 ((?=/)|$)
将此与前瞻相结合,意思是“匹配后出现斜杠或者这是行尾”。
这是它在测试中的作用。
@Test
public void test_quote_items() {
String regex = "(?<==)([^/]*)((?=/)|$)";
String actual = "source=abc/task=cde/env=it".replaceAll(regex,"'$1'");
String expected = "source='abc'/task='cde'/env='it'";
assertEquals(expected, actual);
}
尝试
String input = "source=abc/task=cde/env=it".replaceAll("=(.*?)(/|$)","='$1'/");
我发现的问题是您没有替换=
并且/
不在 String 的末尾,找到后也需要替换。
output
source='abc'/task='cde'/env='it'/
如果您不想要最后一个“/”,那么删除它是微不足道的,不是吗。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.