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

我试过了:

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

但我认为其中一些需要逃脱。我怎么知道哪些?

4

4 回答 4

7

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

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

据我所知,其他元字符是按字面意思在字符类中使用的。

于 2011-04-29T19:50:57.703 回答
1

如果将减号作为第一个或最后一个字符放入组中,则不需要任何掩码,因为那样它就不能像 [az] 中那样表示“直到”。类似地,插入符号仅表示“不在此组中”,如果它是组的第一个字符:[^az] := not az。
量词 (+?*) 在组中没有任何意义,因此用于表示它们的字符在这里代表它们自己。其他字符在正则表达式中绝不意味着什么特别的东西。

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)
于 2011-04-29T20:17:49.887 回答
0

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

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

于 2011-04-29T21:34:06.747 回答
-1

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

编辑

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

于 2011-04-29T19:52:50.627 回答