我试图创建一个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());
}
你可以使用一个否定的lookback(?
String regex = "(?<!\\\\)(?:\\\\{2})*\\\\$";
或者不回头看也一样:
String regex = "(?:^|[^\\\\])(?:\\\\{2})*\\\\$";
这将做到这一点:
(^[^\\\])(\\\\\\\\\\\\)*$
说明:
>
它可能以没有字母开始。
零也是一个偶数
您只需强制字符串以\\的倍数结尾。就是这样。\\\\\\\\\
使用此网站调试正则表达式和其他信息:http://regex101.com/
这一个有效。“^.*.[^\\\](\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\$”
。您只是忘记了一些反斜杠。
您可以使用此站点来测试正则表达式。
哦,您应该检查此项,以确保^
和$
运算符按照您的想法工作。
从链接:
默认情况下,这些表达式仅在整个输入序列的开头和结尾匹配
因此,如果要匹配行的开头和结尾,应该在正则表达式的开头添加“(?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%地重现了这个问题: 下面是我运行它时得