Java 如何创建以下集合的角色类 +-*/%=!&^|?:

Java 如何创建以下集合的角色类 +-*/%=!&^|?:,java,regex,character-class,Java,Regex,Character Class,我试过: + - * / % < > = ! & ^ | ? : [+-*/%=!&^ |?:] 但我认为他们中的一些人需要找替罪羊。我怎样才能知道是哪一个呢?您需要转义-,否则它将被解释为介于+和*之间的字符范围,这是无效的: [+-*/%<>=!&^|?:] [+\-*/%=!&^|?:] 据我所知,其他元字符是在字符类中按字面意思提取的。通过阅读手册:-)?+是匹配至少一个前一个字符,*表示任意数量的字符,|是逻辑的,^定义字符的否定。 当然

我试过:

+ - * / % < > = ! & ^ | ? :
[+-*/%=!&^ |?:]

但我认为他们中的一些人需要找替罪羊。我怎样才能知道是哪一个呢?

您需要转义
-
,否则它将被解释为介于
+
*
之间的字符范围,这是无效的:

[+-*/%<>=!&^|?:]
[+\-*/%=!&^|?:]
据我所知,其他元字符是在字符类中按字面意思提取的。

通过阅读手册:-)?+是匹配至少一个前一个字符,*表示任意数量的字符,|是逻辑的,^定义字符的否定。 当然,你也可以逃脱所有这些

编辑


我明白了,我也应该先读一下手册:-)

如果你把减号作为第一个或最后一个字符放在你的组中,你不需要任何遮罩,因为它不能像[a-z]那样表示“直到”。类似地,如果插入符号是组的第一个字符:[^a-z]:=非a-z,则插入符号仅表示“不在此组中”。
量词(+?*)在组中没有任何意义,因此用于表示它们的字符在这里代表它们自己。 其他字符在正则表达式中从来没有特殊的含义

scala中的快速演示:

[+\-*/%<>=!&^|?:]

对于(c而不是显式枚举要匹配的符号,您可以尝试使用一个字符类,如\p{Punct}(匹配US-ASCII标点符号)或\W匹配非单词字符!(A-Za-z0-9)


您可能会使用类似于\p{Punct}*或\W*的内容,它们可能会导致比其他搜索范围更广的内容,但这可能不是一件坏事。…

您还可以将
-
移动到字符类的开头或结尾,并且可以在不转义的情况下按字面意思执行:
[-+*/%=!&^?:]
但是顺序往往是加、减、倍、除,而不是减、加、倍、除,所以是的……字符类中具有特殊意义的字符是“^-]”,所以我认为^E也需要转义…@jball:
^
只有当它是字符类中的第一个字符时才具有特殊意义。否则它就被视为文本是的。啊,这很有道理。谢谢。我希望我能一个回答另一个评论:)是的,谢谢。这就是BoltClock在一条评论+1中提到的
for (c <- "-+*/%<>=!&^|?:") yield ("" + c).matches ("[-+*/%<>=!&^|?:]") 
res1: scala.collection.immutable.IndexedSeq[Boolean] =
  Vector(true, true, true, true, true, true, true, true, true, true, true, true, true, true)