245

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

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

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

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

4

12 に答える 12

481

tl;dr

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

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

 


さて、厳しくするなら…

上記は正確には正しくありません。はゼロ以上*意味するため、通常は一致しない次のすべてのケースに一致します。

  • 空の文字列 ""。
  • 完全にスペース " " で構成される文字列。
  • 先頭および/または末尾にスペースを含む文字列 " Hello World "。
  • "Hello World" という単語の間に複数のスペースを含む文字列。

もともと、OPは厳密さが問題ではないように見えるような基本的な質問をしていたので、そのような詳細に入る価値があるとは思いませんでした. しかし、質問がある程度人気を博した今、私は言いたいです...

... @stema の回答を使用します。

私の好みでは(を使用せずに\w)、次のように変換されます。

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

(とにかく@stemaに賛成票を投じてください。)

この(および@stemaの)回答について注意すべき点:

  • 単語間に複数のスペースを許可したい場合(たとえば、偶発的なダブルスペースを許可したい場合、または PDF からテキストをコピーして貼り付けた場合)、+スペースの後に a を追加します。

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

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

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

まだ動作していません?

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

 


*この質問にというタグが付けられていることは知っていますが、25,000 回以上のビューに基づいて、この質問に出くわしているのはこれらの人々だけではないと推測しています。現在、検索フレーズ、正規表現 space wordの google での最初のヒットです。

于 2013-03-18T08:54:56.960 に答える
149

1 つの可能性は、acheong87 が提案したように、文字クラスにスペースを追加することです。これは、5 つのスペースで始まる文字列、またはスペースのみで構成される文字列も許可されるため、パターンにどれだけ厳密であるかによって異なります。

他の可能性は、パターンを定義することです:

私はこれを使用\wしますが、これはほとんどの正規表現フレーバーと同じです[a-zA-Z0-9_](Unicode ベースの場合もあります)。

^\w+( \w+)*$

これにより、一連の少なくとも 1 つの単語が許可され、単語はスペースで区切られます。

^文字列の先頭に一致

\w+少なくとも 1 つの単語文字のシリーズに一致

( \w+)*0回以上繰り返されるグループです。グループでは、スペースの後に少なくとも 1 つの単語文字が続くことが期待されます

$文字列の末尾に一致

于 2013-03-18T09:46:43.447 に答える
14

試してみてください:

^(\w+ ?)*$

説明:

\w             - alias for [a-zA-Z_0-9]
"whitespace"?  - allow whitespace after word, set is as optional
于 2013-03-18T08:55:00.553 に答える
8

先頭/末尾のスペースは必要ないと思います。これは、正規表現を「最初の文字」、「中間のもの」、「最後の文字」に分割する必要があることを意味します。

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

または、perl のような構文を使用する場合:

^\w[\w ]*\w$

また、空の文字列も許可する正規表現を意図的に表現した場合は、すべてをオプションにする必要があります。

^(\w[\w ]*\w)?$

単一のスペース文字のみを許可する場合は、少し異なります。

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

これは、0..n 個の単語の後に 1 つのスペースが続き、さらにスペースのない 1 つの単語に一致します。そして、空の文字列を許可するためにすべてをオプションにします。

于 2013-03-18T09:01:18.387 に答える