替换字符串开头出现奇数次的字符 || 正则表达式

3

我正在尝试创建一个正则表达式,用于查找字符串开头的斜杠(/)数量,如果有奇数个反斜杠,则将其替换为空字符串。

    String regex = "^/(//)*";
    System.err.println("Case1: " +   "/".replaceAll(regex,""));
    System.err.println("Case2: " +   "//".replaceAll(regex,""));
    System.err.println("Case3: " +   "///".replaceAll(regex,""));
    System.err.println("Case4: " +   "/b".replaceAll(regex,""));
    System.err.println("Case5: " +   "//b".replaceAll(regex,""));
    System.err.println("Case6: " +   "///b".replaceAll(regex,""));

我的正则表达式在情况1、3、4和6下运行正常,但在情况2和5下,输出分别为/和/b。
请帮忙看一下。

那么你期望的是什么?"/" => """//" => "//""///" => "" - bobbel
2个回答

3
在正则表达式中添加一个负向先行断言(?!/),以检查在匹配奇数个/后是否还有其他的/。在您的情况下,它从/////选取了奇数个/,因此没有起作用。
String regex = "^/(//)*(?!/)";
                       ^^^^^ here

2
你比我快几秒钟。+1 - piet.t

1
尝试这个。
String regex = "^/(//)*(?=[^/]|$)";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接