38

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

\w but without _

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

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

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

前もって感謝します!

4

7 に答える 7

50

次の文字クラス(Perl)

[^\W_]

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

于 2013-02-13T16:43:12.923 に答える
13

あなたは否定的な先読みを使うことができます:(?!_)\w

ただし、書く方が読みやすいと思います[a-zA-Z0-9.-]

于 2013-02-13T16:41:18.720 に答える
3

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

[a-zA-Z0-9.-]

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

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

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

于 2013-02-13T16:40:36.257 に答える
3

私の理解が正しければ、ピリオド記号を\w意味し、ダッシュは含まれません。[A-Za-z0-9_]

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

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

于 2013-02-13T16:42:40.477 に答える
1

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

\w(?<!_)
于 2013-02-13T16:41:01.943 に答える
0

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

于 2013-02-13T16:43:10.363 に答える
0

あなたはこのようなものを書くことができます:

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

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

于 2017-12-18T13:59:35.653 に答える