web-dev-qa-db-ja.com

正規表現:下線なしで\ wを表現する方法

簡潔な表現方法はありますか:

\w but without _

つまり、「_を除く、\ wに含まれるすべての文字」

ドメイン名の検証を表現する最も簡潔な方法を探しているので、これを求めています。ドメイン名には、小文字、大文字、数字、ピリオド記号、ダッシュを含めることができますが、アンダースコアを含めることはできません。\wには、上記すべてとアンダースコアが含まれます。では、正規表現構文を使用して\ wからアンダースコアを「削除」する方法はありますか?

編集: PHPで使用される正規表現について質問しています。

前もって感謝します!

23

次の文字クラス(Perl)

[^\W_]

\W[^\w]と同じです

38
protist

negative lookahead を使用できます:(?!_)\w

しかし、私は[a-zA-Z0-9.-]の方が読みやすくなっています。

9
Bergi

私の理解が正しい場合\w 手段 [A-Za-z0-9_]ピリオド記号、ダッシュは含まれません。

情報: http://en.wikipedia.org/wiki/Regular_expression#POSIX_character_classes

だからあなたが欲しいのは[a-zA-Z0-9.-]

3
Kent

安全のため、通常は文字クラスを使用します。

[a-zA-Z0-9.-]

上記の正規表現「フラグメント」は、英語のアルファベットと数字、ピリオド.およびダッシュ-に一致します。これは、最も基本的な正規表現サポートでも機能するはずです。

短いほど良いかもしれませんが、それが何を表しているのか正確に知っている場合に限られます。

あなたが使っている言語がわかりません。多くのエンジンでは、\w[a-zA-Z0-9_]と同等です(一部のエンジンでは「ASCIIモード」が必要です)。ただし、一部のエンジンは正規表現のUnicodeサポートを備えており、Unicode文字に一致するように\wを拡張する場合があります。

3
nhahtdh

[^ _]から始めて、次に、他に拒否する必要がある文字を考えます。キーボード入力をフィルタリングする必要がある場合、不要な文字をすべて列挙するのは非常に簡単です。

1
Zoltán Tamási

一部の正規表現フレーバーには、使用できる否定的な後読み構文があります。

\w(?<!_)
1
Zero Piraeus

次のように書くことができます:

\([^\w]|_)\u

この文字列でpreg_filterを使用すると、\ w(_アンダースコアを除く)のすべての文字がフィルタリングされます。

0
MrD