首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java regex:[^(\s?-\\s?)]。PatternSyntaxException on‘s?

Java regex:[^(\s?-\\s?)]。PatternSyntaxException on‘s?
EN

Stack Overflow用户
提问于 2014-08-04 01:11:23
回答 2查看 329关注 0票数 0

我今天刚开始学习java regex,所以请原谅我采取了一种非常懒惰的方法来学习regex的问题所在。基本上,我试图在‘空格’、-、‘空格’模式上拆分一个字符串(其中空白要么是一个,要么没有),我不知道为什么这个模式没有编译。在^(?-s?)中的第二个s出现了一个错误。如果有人能帮我,我会很感激的!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-04 01:37:35

您正在将您的模式放置在一个被否定的字符类内部,它正在做与您期望的完全相反的事情。

代码语言:javascript
复制
[^(\s?-\s?)]  # matches any character except: 

                  # '('
                  # whitespace (\n, \r, \t, \f, and " ") 
                  # '?'
                  # '-'
                  # whitespace (\n, \r, \t, \f, and " ")
                  # '?'
                  # ')'

您的语法确实不正确,但是why will it not compile?很好,在字符类中,连字符具有特殊的含义。您可以将连字符作为类的第一个或最后一个字符。在一些正则表达式实现中,您也可以将其直接放在某个范围之后。如果将连字符放置在其他任何地方,则需要转义它,以便将其添加到类中。

修复编译问题,您可以简单地转义连字符,但是这个正则表达式仍然没有完成您想要的操作。

我试图在-**,空白上拆分一个字符串,空格模式**.

从模式中移除字符类和捕获组:

代码语言:javascript
复制
String s = "foo - bar - baz-quz";
String[] parts = s.split("\\s?-\\s?");
System.out.println(Arrays.toString(parts)); //=> [foo, bar, baz, quz]

以下是学习正则表达式的一些参考资料。

  • Regular-Expressions.info
  • RexEgg -教程
票数 3
EN

Stack Overflow用户

发布于 2014-08-04 01:13:31

S是一个字符类。[]内的字符被视为这些字符。(或在^的情况下不指定字符)。在[]中使用\s是没有意义的。

也许你的意思是用括号代替大括号?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25110565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档