すべての入力文字列を拒否する正規表現を作成することは可能ですか?
11 に答える
おそらくこれ:
[^\w\W]
\w - 単語の文字 (文字、数字など)
\W - \w の反対
[^\w\W] - 文字はいずれかの文字クラス (\w または \W) に属している必要があるため、常に失敗する必要があります。
別のスニペット:
$.^
$ - 文字列の末尾の位置を
アサートします。^ - 行頭の位置をアサートし
ます。- 任意の文字
(?#it's just a comment inside of empty regex)
空の先読み/後読みが機能するはずです:
(?<!)
すべての入力を拒否する最適な標準正規表現 (すなわち、先読みまたは後方参照なし) は (上記の @aku の後) です。
.^
と
$.
これらは単純な矛盾です。「先頭の前に文字がある文字列」と「末尾の後に文字がある文字列」です。
注: 正規表現の実装によっては、これらのパターンを不適切な形式として拒否する可能性があります (^
パターンの最初と$
最後にあることを正規表現で確認するのは非常に簡単です)。それらを受け入れてください。これらは、改行を許可^
し、一致させる実装でも機能しません。$
(?=not)possible
?= は前向きの先読みです。それらはすべての正規表現フレーバーでサポートされているわけではありませんが、多くのフレーバーでサポートされています。
式は「not」を探し、次に同じ位置から始まる「possible」を探します (先読みは文字列内で前方に移動しないため)。
そのようなことが必要になる可能性がある理由の 1 つの例は、正規表現を使用して一部の入力をフィルタリングし、正規表現を引数として関数に渡す場合です。
関数型プログラミングの精神では、代数的完全性のために、「すべてが許可されている」や「何も許可されていない」などの簡単なプライマリ正規表現が必要になる場合があります。
私には、あなたが問題を間違った方法で攻撃しているように聞こえますが、正確には何を解決しようとしていますか?
すべてをキャッチして結果を否定する正規表現を実行できます。
例:javascript:
if (! str.match( /./ ))
しかし、あなたはただすることができます
if (!foo)
代わりに、@[jan-hani]が言ったように。
このような正規表現を別の正規表現に埋め込む場合は、代わりに$または^を探すか、@[henrik-n]のような先読みを使用してください。
しかし、私が言ったように、これは「私はxが必要だと思いますが、私が本当に必要としているのはyです」という問題のように見えます。
なぜあなたはそれを望んでいますか?単純な if ステートメントでうまくいきませんか? 次のようなもの:
if ( inputString != "" )
doSomething ()
[^]+
それをする必要があります。
これに添付されたakuのコメントに答えて、オンラインの正規表現テスター(http://www.regextester.com/)でテストしたので、JavaScriptで動作すると仮定します。「実際の」コードでテストしないことを告白する必要があります。;)
「正規表現」の意味によって異なります。特定のプログラミング言語またはライブラリの正規表現を意味しますか? その場合、答えはおそらくイエスであり、上記の回答のいずれかを参照できます。
コンピューター サイエンスの授業で教えられている正規表現を意味する場合、答えはノーです。すべての正規表現は、何らかの文字列に一致します。空の文字列の場合もありますが、常に何かに一致します。
いずれにせよ、質問のタイトルを編集して、意味する正規表現の種類を絞り込むことをお勧めします。
[^\x00-\xFF]
編集: [^\n\r\w\s]
良い、
文字列をマッチさせる方法を正規表現でずっと考えていたので、理解できたかどうかは定かではありません。あなたが持っている最善の方法は、正規表現を使用しないことだと思います。
ただし、空行に一致する正規表現や、 ...^$
のような単語/スペースに一致しない正規表現を使用することもできます。[^\w\s]
それが役に立てば幸い!