web-dev-qa-db-ja.com

正規表現で文字を否定する

次の基準に一致する正規表現をどのように作成しますか?

  • 数字なし
  • 特殊文字なし
  • 場所がない

文字列で

34
nimi

文字クラス[^]内のキャレットは、ほとんどの正規表現の実装(Perl、.NET、Ruby、Javascriptなど)に共通の否定演算子です。だから私はこのようにします:

[^\W\s\d]
  • ^-文字クラスにないものに一致
  • \ W-非Word文字に一致します(Word文字はa-z、A-Z、0-9、およびアンダースコアとして定義されます)。
  • \ s-空白(スペース、タブ、キャリッジリターン、ラインフィード)と一致
  • \ d-0〜9に一致

または、必要なものだけを含めるだけで、別のアプローチを取ることができます。

[A-Za-z]

ここでの主な違いは、最初のものにはアンダースコアが含まれることです。それは、あなたが考えているのと同じ用語で表現を書く方法を示しています。ただし、逆にすると、文字を除外するのではなく含めることを考えている場合は、正規表現が読みやすくなることがあります。

あなたがどの特殊文字を使いたくないのかは完全にはわからない。しかし、一方が他方よりもうまく機能する場合のために、両方のソリューションを書きました。

71
Steve Wortham

Perlでは、次のようになります。

$string !~ /[\d \W]/

もちろん、それは「特殊文字」の定義に依存します。 \Wは、Word以外のすべての文字に一致します。 Word文字は、英数字とスペース文字です。

2
Thomas Owens

正規表現について学ぶ最も重要なことは、構文ではなく、探しているものを明確に説明する能力です。それは本当に問題の90%です。
また、通常は、望んでいないものよりも望んでいるものを述べる方が良いでしょう。

0
Matteo Riva

^ [^ 0-9\p {P}] $を試してください

0
Paul McLean