[a-zA-Z0-9!$* \t\r\n]
既存の文字と一緒にハイフンに一致するようにパターンを書き直す方法は ?
[a-zA-Z0-9!$* \t\r\n]
既存の文字と一緒にハイフンに一致するようにパターンを書き直す方法は ?
回答:
ハイフンをエスケープします。
[a-zA-Z0-9!$* \t\r\n\-]
更新:
この回答は気にしないでください。グループにハイフンを追加できますが、エスケープする必要はありません。代わりに、Konrad Rudolphの回答を参照してください。これは、はるかに優れた回答を行い、その理由を説明しています。
ハイフンは通常、正規表現では通常の文字です。それがキャラクタークラスにあり、他の2つのキャラクターの間にある場合にのみ、特別な意味を持ちます。
したがって:
[-]
ハイフンに一致します。[abc-]
マッチa
、b
、c
またはハイフン。[-abc]
マッチa
、b
、c
またはハイフン。[ab-d]
マッチa
、b
、c
またはd
(ここでしかハイフンは、文字の範囲を表します)。[a-c-e]
:これは一部の正規表現仕様/エンジンでは単に無効です。たとえば、POSIX正規表現はそれを許可しません。
常にエスケープされたハイフンを使用する方が混乱が少ないため、位置に依存する必要はありません。これ\-
は、括弧で囲まれた文字クラスの内側です。
しかし、考慮すべきことが他にあります。それらの列挙された文字のいくつかは、おそらく異なって書かれるべきです。状況によっては、間違いなくそうすべきです。
この正規表現フレーバーの比較は、C♯がより単純なUnicodeプロパティのいくつかを使用できることを示しています。Unicodeを扱っている場合は、考え\p{L}
られるすべての文字、およびおそらく \p{Nd}
10進数に一般カテゴリを使用する必要があります。また、HYPHEN-MINUSだけでなく、すべてのダッシュ句読点に対応する場合は、\p{Pd}
プロパティを使用する必要があります。また\s
、あまり一般的ではないと仮定して、空白文字のシーケンスを単純にとして記述したい場合もあります。
全体として[\p{L}\p{Nd}\p{Pd}!$*]
、それはそのセットの任意の1文字に一致するパターンになります。
とにかく、完全なUnicodeセットを扱う予定がなかったとしても、それを使用する可能性があります。これは、始めるのが良い習慣であり、これらのものが元のパラメーターを超えることが多いためです。これで、他のコードで使用するために持ち上げても、正しく機能します。すべての文字をハードコーディングすると、ハードコーディングされません。
[-a-z0-9] +、[a-z0-9-] +、[az-0-9] +および[az-0-9] +はすべて同じです。2つの範囲の間のハイフンはシンボル。また、[a-z0-9-+()] +この正規表現はハイフンを許可します。