簡潔な表現方法はありますか:
\w but without _
つまり、「_を除く、\ wに含まれるすべての文字」
ドメイン名の検証を表現する最も簡潔な方法を探しているので、これを求めています。ドメイン名には、小文字、大文字、数字、ピリオド記号、ダッシュを含めることができますが、アンダースコアを含めることはできません。\wには、上記すべてとアンダースコアが含まれます。では、正規表現構文を使用して\ wからアンダースコアを「削除」する方法はありますか?
編集: PHPで使用される正規表現について質問しています。
前もって感謝します!
次の文字クラス(Perl)
[^\W_]
\W
は[^\w]
と同じです
negative lookahead を使用できます:(?!_)\w
しかし、私は[a-zA-Z0-9.-]
の方が読みやすくなっています。
私の理解が正しい場合\w
手段 [A-Za-z0-9_]
ピリオド記号、ダッシュは含まれません。
情報: http://en.wikipedia.org/wiki/Regular_expression#POSIX_character_classes
だからあなたが欲しいのは[a-zA-Z0-9.-]
安全のため、通常は文字クラスを使用します。
[a-zA-Z0-9.-]
上記の正規表現「フラグメント」は、英語のアルファベットと数字、ピリオド.
およびダッシュ-
に一致します。これは、最も基本的な正規表現サポートでも機能するはずです。
短いほど良いかもしれませんが、それが何を表しているのか正確に知っている場合に限られます。
あなたが使っている言語がわかりません。多くのエンジンでは、\w
は[a-zA-Z0-9_]
と同等です(一部のエンジンでは「ASCIIモード」が必要です)。ただし、一部のエンジンは正規表現のUnicodeサポートを備えており、Unicode文字に一致するように\w
を拡張する場合があります。
[^ _]から始めて、次に、他に拒否する必要がある文字を考えます。キーボード入力をフィルタリングする必要がある場合、不要な文字をすべて列挙するのは非常に簡単です。
一部の正規表現フレーバーには、使用できる否定的な後読み構文があります。
\w(?<!_)
次のように書くことができます:
\([^\w]|_)\u
この文字列でpreg_filterを使用すると、\ w(_アンダースコアを除く)のすべての文字がフィルタリングされます。