如何创建以下集的字符类

时间:2011-04-29 19:49:10

标签: java regex character-class

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

我试过了:

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

但我认为其中一些需要被挖空。我怎么知道哪些?

4 个答案:

答案 0 :(得分:7)

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

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

据我所知,其他元字符字面意思是字符类。

答案 1 :(得分:1)

如果您将减号作为第一个或最后一个字符放入您的组中,则不需要任何屏蔽,因为它不能像[a-z]那样意味着“直到”。同样,插入符只表示“不在此组中”,如果它是该组的第一个字符:[^ a-z]:= not a-z。
量词(+?*)在一个组中没有任何意义,因此用于表示它们的字符在这里代表自己。 其他字符在正则表达式中从不意味着特殊的东西。

scala中的快速演示:

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)

答案 2 :(得分:0)

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

你会使用像\ p {Punct} *或\ W *之类的东西,它们可能会导致比你的其他搜索更广泛的东西,但这可能不是一件坏事....

答案 3 :(得分:-1)

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

修改

我明白了,我本应该先阅读手册: - )