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

私はもう試した:

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

しかし、それらのいくつかはエスケープする必要があると思います。どのように見分けることができますか?

4

4 に答える 4

7

asをエスケープする必要があります。-そうしない+*、 と の間の文字範囲として解釈され、無効になります。

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

私の知る限り、他のメタキャラクターは文字クラスで文字どおりに解釈されます。

于 2011-04-29T19:50:57.703 に答える
1

マイナスをグループの最初または最後の文字として使用する場合、[az] のように「まで」を意味することができないため、マスキングは必要ありません。同様に、キャレットは、グループの最初の文字である場合にのみ「このグループにない」ことを意味します: [^az] := 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) などの文字クラスの 1 つを使用してみてください。

\p{Punct}* や \W* のようなものを使用すると、他の検索よりも少し広い結果になる可能性がありますが、それは悪いことではないかもしれません....

于 2011-04-29T21:34:06.747 に答える
-1

マニュアルを読んで:-)? + は少なくとも 1 文字前の文字と一致、* は任意の数の文字、| を意味します。論理 or ^ は文字の否定を定義します。また、確実にそれらすべてをエスケープすることもできます!

編集

なるほど、最初にマニュアルも読むべきでした:-)

于 2011-04-29T19:52:50.627 に答える