我今天刚开始学习 java 正则表达式,所以请原谅我采取了一种相当懒惰的方法来了解我的正则表达式有什么问题。基本上我试图在'空白',-,'空白'模式(空白是一个或没有)上分割一个字符串,我不确定为什么模式没有编译。我在第二个 s 中收到错误:[^(\s?-\s?)](索引 8)。如果有人可以帮助我,我将不胜感激!
问问题
310 次
2 回答
3
您将尝试拆分的模式放在否定字符类中,在该类中它的作用与您期望的完全相反。
[^(\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-04T01:37:35.190 回答
0
\s 是一个字符类。[] 内的字符被视为那些字符。(或者在 [^] 的情况下不是特定字符)。在 [] 中使用 \s 是没有意义的。
也许您的意思是使用括号而不是大括号?
于 2014-08-04T01:13:31.360 回答