繁体   English   中英

用于匹配“=”和“/”或“=”和字符串结尾之间的字符串的正则表达式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM