当前位置: 首页 > 知识库问答 >
问题:

需要Regex帮助,使用反斜杠

卢开济
2023-03-14

我试图创建一个Java正则表达式,如果字符串末尾有奇数个反斜杠(),它将返回true,如果偶数,则返回false。

这是我的正则表达式

    String regex = "^.*[^\\](\\\\)*\\$";
    Pattern pattern = Pattern.compile(regex);

当我编译代码时,我得到以下异常

线程“main”java.util.regex.PatternSyntaxException中的异常:索引15^([^])(\)附近的未关闭字符类\$

如果我使用M模式编译并运行良好,则可以使用反斜杠代替反斜杠

    String regex = "^.*" + "[^M]" + "(MM)*M$";

我知道这是一个逃避的问题,但我无法解决。以下是整个方法

    private static void testSpecificRegex() {
    String a = "india\\";
    String b = "india\\\\";
    String c = "india\\\\\\";
    String d = "india\\\\\\\\";

/*  String a = "indiaM";
    String b = "indiaMM";
    String c = "indiaMMM";
    String d = "indiaMMMM";*/

    String regex = "^.*[^\\](\\\\)*\\$";
    //String regex = "^.*" + "[^M]" + "(MM)*M$";
    System.err.println(regex);
    Pattern pattern = Pattern.compile(regex); // why i need to compile
    Matcher matcher = pattern.matcher(a); 
    System.err.println(matcher.matches());
    matcher = pattern.matcher(b); 
    System.err.println(matcher.matches());
    matcher = pattern.matcher(c); 
    System.err.println(matcher.matches());
    matcher = pattern.matcher(d); 
    System.err.println(matcher.matches());
}

共有3个答案

夏雅志
2023-03-14

你可以使用一个否定的lookback(?

 String regex = "(?<!\\\\)(?:\\\\{2})*\\\\$";

或者不回头看也一样:

String regex = "(?:^|[^\\\\])(?:\\\\{2})*\\\\$";

顾亦
2023-03-14

这将做到这一点:

(^[^\\\])(\\\\\\\\\\\\)*$

说明:

>

  • 它可能以没有字母开始。

    零也是一个偶数

    您只需强制字符串以\\的倍数结尾。就是这样。\\\\\\\\\

    使用此网站调试正则表达式和其他信息:http://regex101.com/

  • 冯阳云
    2023-03-14

    这一个有效。“^.*.[^\\\](\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\$”。您只是忘记了一些反斜杠。
    您可以使用此站点来测试正则表达式。
    哦,您应该检查此项,以确保^$运算符按照您的想法工作。
    从链接:

    默认情况下,这些表达式仅在整个输入序列的开头和结尾匹配

    因此,如果要匹配行的开头和结尾,应该在正则表达式的开头添加“(?m)”

     类似资料:
    • 问题内容: 这是一个“到底发生了什么”的问题。我实际上不需要解决方案。 我必须用双反斜杠替换字符串中的所有单反斜杠。这就是我最终要做的… …其中strRootDirectory是上面的java.lang.String。 现在,我了解了第一个参数的四个反斜杠:regex期望两个反斜杠以表示单个文字反斜杠,而Java希望它们加倍。没关系。 但是,第二个参数的八个反斜杠到底是怎么回事?替换字符串不是应该

    • 我需要一些帮助用JSOUP解析这个html。我正在尝试从表中的每一列获取数据值。我一直在看JSoup文档,试图弄清楚我到底需要做什么,但还是不确定。看起来网站使用了CSS和内联格式的组合;其中大部分可以转换为CSS并减小页面大小。 这是html文件的一个小片段(实际上差不多有5 MB大小)。 更新:我已经更新了源代码,以更准确地显示html的结构。我假定tbody将位于表元素中是一个给定的条件。我

    • 首先,我是C、C++、C#、Android和Swift的开发人员,但我绝对没有JavaScript、PHP或Web开发经验。 即只接受整数值的输入。 这是刀片代码:

    • 然后,这需要转到数据库,该数据库向工作人员发送返回消息,告诉他们该成员已被添加。 只有工作人员在和系统通话,没有人。

    • 我是一名Java新手,在可比接口中重写compareTo方法时遇到了一些问题。我的代码创建了一个HashMap,将字符串与int关联起来。我希望重写compareTo,以便ArrayList键中的字符串根据其HashMap值排序,而不是按字母顺序排序。然而,在这种实现下,字符串仍然按字母顺序排序。 哦,澄清一下,nameWeight是字符串和整数对的哈希映射。 有什么想法吗?

    • 发布这个问题的人似乎和我一样使用了同样的Bazel交叉构建教程,但他们对根本原因得出了非常不同的结论(即,他们声称这是由于输入错误的include路径导致的用户错误)。在我的例子中,所有路径都是正确的,但它们被nsync的构建忽略/重写。我真的需要一些帮助来弄清楚需要什么更改才能用Linaro工具链正确构建nsync。 下面是一个小脚本,它在我的系统上100%地重现了这个问题: 下面是我运行它时得