1. ホーム
  2. regex

[解決済み】単語間のスペースを許容する正規表現

2022-04-02 16:22:27

質問

記号を禁止し、文字と数字のみを許可する正規表現が欲しいのですが、どうすればいいですか?以下の正規表現はうまくいくのですが、単語と単語の間にスペースを入れることができません。

^[a-zA-Z0-9_]*$

例えば、この正規表現を使った場合、"HelloWorld"は問題ないが、"Hello World"はマッチしない。

スペースを許可するようにするには、どのようにいじればよいのでしょうか?

解決方法は?

tl;dr

の中にスペースを入れるだけです。 文字クラス .

^[a-zA-Z0-9_ ]*$


さて、厳密には...。

上記は正確には正しくない。という事実のために * というのは ゼロまたはそれ以上 の場合、通常はマッチしない次のようなケースにすべてマッチしてしまいます。

  • 空の文字列、""。
  • スペースのみで構成された文字列、" "。
  • Hello World のように、先頭または末尾に空白を含む文字列。
  • 単語と単語の間に複数のスペースを含む文字列、"Hello World".

元々は、OPが基本的な質問をしているため、厳密性を気にする必要はないだろうと思い、そのような細かいことは気にしないようにしていました。しかし、この質問が人気を博している今、私は言いたいのです。

...使用 ステマの答え .

というのは、私の味付けでは( \w ) に変換されます。

^[a-zA-Z0-9_]+( [a-zA-Z0-9_]+)*$

(関係なく@stemaにupvoteしてください)

この(そして@stemaの)回答について注意すべき点がいくつかあります。

  • を許可したい場合 マルチプル 単語と単語の間にスペースを入れる場合(たとえば、誤ってダブルスペースを許容したい場合や、PDFからコピーペーストしたテキストを扱う場合など)には、単語と単語の間のスペースに + の後にスペースを入れてください。

    ^\w+( +\w+)*$
    
    
  • タブや改行(空白文字)を許可したい場合は、スペースを \s+ :

    ^\w+(\s+\w+)*$
    
    

    ここで、私は + をデフォルトで使用するようにします。なぜなら、例えばWindowsの改行は という空白文字が並んでいます。 \r\n が必要なので + を使えば、両方をキャッチできます。

まだ動かない?

使用している正規表現の方言を確認してください。 Javaなどの言語では、バックスラッシュをエスケープする必要があります。 すなわち \\w\\s . 古い、あるいはもっと基本的な言語やユーティリティでは、例えば sed , \w\s は定義されていないので、文字クラスで書き出します。 [a-zA-Z0-9_][\f\n\p\r\t] それぞれ


* この質問にはタグが付いています vb.net しかし、25,000以上のビューから推測すると、この質問に遭遇しているのはそのような人々だけではありません。現在、googleの検索フレーズで最初にヒットするのはこれです。 正規表現スペースワード .