+ - * / % < > = ! & ^ | ? :
私はもう試した:
[+-*/%<>=!&^|?:]
しかし、それらのいくつかはエスケープする必要があると思います。どのように見分けることができますか?
+ - * / % < > = ! & ^ | ? :
私はもう試した:
[+-*/%<>=!&^|?:]
しかし、それらのいくつかはエスケープする必要があると思います。どのように見分けることができますか?
asをエスケープする必要があります。-
そうしない+
と*
、 と の間の文字範囲として解釈され、無効になります。
[+\-*/%<>=!&^|?:]
私の知る限り、他のメタキャラクターは文字クラスで文字どおりに解釈されます。
マイナスをグループの最初または最後の文字として使用する場合、[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)
一致する記号を明示的に列挙する代わりに、\p{Punct} (US-ASCII 句読点に一致) や \W は単語以外の文字に一致する !(A-Za-z0-9) などの文字クラスの 1 つを使用してみてください。
\p{Punct}* や \W* のようなものを使用すると、他の検索よりも少し広い結果になる可能性がありますが、それは悪いことではないかもしれません....
マニュアルを読んで:-)? + は少なくとも 1 文字前の文字と一致、* は任意の数の文字、| を意味します。論理 or ^ は文字の否定を定義します。また、確実にそれらすべてをエスケープすることもできます!
編集
なるほど、最初にマニュアルも読むべきでした:-)