単語間のスペースを許可する正規表現 質問する

単語間のスペースを許可する正規表現 質問する

記号を使用できず、文字と数字のみを許可する正規表現が必要です。以下の正規表現はうまく機能しますが、単語間のスペースは使用できません。

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

たとえば、この正規表現を使用すると、「HelloWorld」は一致しますが、「Hello World」は一致しません。

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

ベストアンサー1

要約

文字クラスにスペースを追加するだけです。

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

 


さて、厳密に言うと...

上記は厳密には正しくありません。 は0 個以上の*を意味するため、通常は一致しない次のすべてのケースと一致します。

  • 空の文字列「"」。
  • すべてスペース「 」で構成された文字列。
  • 先頭または末尾にスペースがある文字列、「Hello World」。
  • 単語の間に複数のスペースが含まれる文字列、「Hello World」。

当初、私はそのような詳細を述べる価値はないと考えていました。なぜなら、OP は、厳密さは問題ではないと思われるような基本的な質問をしていたからです。しかし、今ではこの質問が人気を集めているので、私はこう言いたいのです...

... @stema の回答を使用してください。

これを私流に翻訳すると( は使用しない\w)、次のようになります。

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

(とにかく@stemaに投票してください。)

この回答(および @stema の回答)について注目すべき点がいくつかあります。

  • 単語間に複数のスペースを許可する場合(たとえば、誤って 2 つのスペースを入れてしまうことを許可する場合や、PDF からコピーして貼り付けたテキストを操作する場合)、+スペースの後に を追加します。

    ^\w+( +\w+)*$
    
  • タブと改行 (空白文字) を許可する場合は、スペースを\s+:に置き換えます。

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

    ここでは、デフォルトで をお勧めします+。たとえば、Windows の改行は2 つの空白文字が連続して で構成されている\r\nため、両方をキャッチするには が必要になるからです+

まだ動かない?

使用している正規表現の方言を確認してください。* Java などの言語では、や のように \\wバックスラッシュをエスケープする必要があります\\s。古い言語やより基本的な言語およびユーティリティでは、 、sed\wは定義されていないため、それぞれ およびのよう\sに文字クラスを使用して記述します。 [a-zA-Z0-9_][\f\n\p\r\t]

 


*この質問にはというタグが付けられていますが、25,000 回以上の閲覧数から判断すると、この質問に遭遇したのはそれらの人々だけではないと思われます。現在、これは、検索フレーズ「regular expression space word」で Google に最初にヒットするものです。

おすすめ記事