我今天刚开始学习java regex,所以请原谅我采取了一种非常懒惰的方法来学习regex的问题所在。基本上,我试图在‘空格’、-、‘空格’模式上拆分一个字符串(其中空白要么是一个,要么没有),我不知道为什么这个模式没有编译。在^(?-s?)中的第二个s出现了一个错误。如果有人能帮我,我会很感激的!
发布于 2014-08-04 01:37:35
您正在将您的模式放置在一个被否定的字符类内部,它正在做与您期望的完全相反的事情。
[^(\s?-\s?)] # matches any character except:
# '('
# whitespace (\n, \r, \t, \f, and " ")
# '?'
# '-'
# whitespace (\n, \r, \t, \f, and " ")
# '?'
# ')'您的语法确实不正确,但是why will it not compile?很好,在字符类中,连字符具有特殊的含义。您可以将连字符作为类的第一个或最后一个字符。在一些正则表达式实现中,您也可以将其直接放在某个范围之后。如果将连字符放置在其他任何地方,则需要转义它,以便将其添加到类中。
要修复编译问题,您可以简单地转义连字符,但是这个正则表达式仍然没有完成您想要的操作。
我试图在
-**,空白上拆分一个字符串,空格模式**.
从模式中移除字符类和捕获组:
String s = "foo - bar - baz-quz";
String[] parts = s.split("\\s?-\\s?");
System.out.println(Arrays.toString(parts)); //=> [foo, bar, baz, quz]以下是学习正则表达式的一些参考资料。
发布于 2014-08-04 01:13:31
S是一个字符类。[]内的字符被视为这些字符。(或在^的情况下不指定字符)。在[]中使用\s是没有意义的。
也许你的意思是用括号代替大括号?
https://stackoverflow.com/questions/25110565
复制相似问题