+ - * / % < > = ! & ^ | ? :
我试过了:
[+-*/%<>=!&^|?:]
但我认为其中一些需要逃脱。我怎么知道哪些?
+ - * / % < > = ! & ^ | ? :
我试过了:
[+-*/%<>=!&^|?:]
但我认为其中一些需要逃脱。我怎么知道哪些?
您需要转义否则它将被解释为and-
之间的字符范围,这是无效的:+
*
[+\-*/%<>=!&^|?:]
据我所知,其他元字符是按字面意思在字符类中使用的。
如果将减号作为第一个或最后一个字符放入组中,则不需要任何掩码,因为那样它就不能像 [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)
您可以尝试使用诸如 \p{Punct} (匹配 US-ASCII 标点符号)或 \W 匹配非单词字符!(A-Za-z0-9)之类的字符类之一,而不是显式枚举要匹配的符号。
您会使用 \p{Punct}* 或 \W* 之类的东西,它们可能会导致比您的其他搜索更广泛的内容,但这可能不是一件坏事......
通过阅读手册:-)?+ 匹配至少一个前一个字符,* 表示任意数量的字符,| 是逻辑或,^ 定义一个字符的否定。当然,您也可以逃脱所有这些!
编辑
我明白了,我也应该先阅读手册 :-)