文字だけに一致する正規表現


374

文字だけに一致する正規表現を作成するにはどうすればよいですか?


58
あなたの定義はcharacters何ですか?ASCII?漢字?Iso-XXXX-X?UTF8?
Ivo Wetzel 2010

45
あなたの定義はregex何ですか?Perl?Emacs?グレップ?
Pascal Cuoq

4
質問が英語であることを考えると、英語のサイトでは、質問が英語の文字に関するものであると想定するのは公正です。
vaer-k

1
私がいることに気づいた\ P {L}文字とのために/ uは Unicodeのフラグが私の正規表現IEの任意の文字に一致する/\p{L}+/u
MaxZoom

4
Given that the question is in English, on an English site, it's fair to assume the question regards characters in English. これは本当です。ご存知のように、英語を話す人はアプリケーションをローカライズすることは決してありません!
Alex

回答:


392

文字セットを使用:[a-zA-Z]小文字と大文字のA〜Zの1文字に一致します。[a-zA-Z]+一の以上の文字と一致し、^[a-zA-Z]+$1つのまたはそれ以上の文字で構成され(文字列のみ一致する^$、それぞれの文字列の開始と終了マーク)。

A〜Z以外の文字を照合する場合は、それらを文字セットに追加できます[a-zA-ZäöüßÄÖÜ]。それとも、のような定義済みの文字クラスを使用してUnicode文字プロパティのクラス\p{L}文字ですUnicode文字を記述します。


119
これは非常にASCII中心のソリューションです。これにより、英語以外のほとんどのテキストが壊れます。
Joachim Sauer

7
@Joachim Sauer:ラテン語以外の文字を使用する言語では、うまくいきません。
2010

15
すでにドイツ語のテキストの90%で中断しています。フランス語やスペイン語についても触れないでください。イタリア語はまだかなりうまくいくかもしれません。
Ivo Wetzel、2010

9
これは、選択した「ラテン文字」の定義によって異なります。J、U、Ö、Äはすべて、定義に基づいて、ラテン文字であるかどうかを示すことができます。しかし、それらはすべて「ラテン文字」を使用して書く言語で使用されています。
Joachim Sauer

9
\ p {L}は、ウムラウトのセディーユアクセントなどすべてに一致するので、それに合わせる必要があります。
Radu Simionescu

198

\p{L} ラテン文字以外のアルファベットに興味がある場合は、Unicodeの文字に一致します


2
すべての正規表現のフレーバーではありません。たとえば、vim正規表現\pは「印刷可能な文字」として扱われます。
フィリップポッター、

3
このページは、java、.net、perl、jgsoft、XML、およびXPath正規表現のみが\ p {L}をサポートすることを示唆しています。しかし、主要な省略:pythonとruby(pythonにはregexモジュールがあります)。
フィリップポッター、

6
@Philip Potter:Rubyは、まったく同じ構文を使用してUnicode文字プロパティをサポートしています。
イェルクWミッターク

6
これは\p{L}\p{M}*+、複数のコードポイントで構成される文字、たとえば文字の後にアクセント記号が続く文字をカバーすることになると思います。あたりとしてregular-expressions.info/unicode.html
ZoFreX

これはpython 3ではエラーになりますbad escape \p at position 0
matanster

46

「キャラクター」の意味に応じて:

[A-Za-z]-すべての文字(大文字と小文字)

[^0-9] -すべての数字以外の文字


私はレッターを意味しました。動作していないようです。preg_match( '/ [a-zA-Z] + /'、$ name);
ナイキ

[A-Za-z]は、使用できる文字の宣言です。この宣言を使用する必要がある回数を宣言する必要があります:[A-Za-z] {1,2}(1文字または2文字に一致)または[A-Za-z] {1、*}(一致) 1文字以上)
KristofMols

17
à、á、ã、Ö、Ä...も文字であり、so、letters 、,、ঈ、Є、Ж、З、ﺡ、ﺥ、ﺩא、ב、ג、ש、ת、...もen.wikipedia.org/wiki/Letter_%28alphabet%29
phuclv 2016

@phuclv:確かに、それはエンコーディングに依存し、エンコーディングはプログラムの設定の一部です(デフォルトの構成またはプログラムの構成ファイルで宣言されている構成)。さまざまな言語で作業していたとき、私はそれを定数の構成ファイルに格納していた。
Catalina Chircu、

1
@CatalinaChircuエンコーディングは、ここでは絶対に無関係です。エンコーディングは、バイナリの文字セットのコードポイントをエンコードする方法です。たとえば、UTF-8はUnicodeのエンコーディングです。文字OTOHは言語に依存し、1つ[A-Za-z]が文字であると言う場合、使用されている言語を指定する必要があります
phuclv

32

利用可能な最も近いオプションは

[\u\l]+

大文字と小文字のシーケンスと一致します。ただし、すべてのエディター/言語でサポートされているわけではないので、おそらく使用する方が安全です。

[a-zA-Z]+

他のユーザーが示唆するように


1
ただし、特殊文字とは一致しません。
Nyerguds

20

あなたは使うでしょう

/[a-z]/gi

[]-指定された入力間の文字をチェックします

az ---アルファベット全体をカバーします

g -----全体の文字列全体で

i -----大文字と小文字を取得する


14

少数の人が "/ ^ [a-zA-Z] $ / i"と書いた正規表現は正しくありません。最後に、大文字と小文字を区別しない/ iについて言及し、最初に一致した後に戻ってくるためです。/ iの代わりに、グローバル用の/ gを使用するだけで、開始と終了のために^ $を置く必要もありません。

/[a-zA-Z]+/g
  1. [a-z _] +は、以下のリストにある単一の文字に一致します
  2. 数量詞:+ 1回から無制限の回数まで、可能な限り多くの回数、必要に応じて還元
  3. az aからzまでの範囲の1文字(大文字と小文字を区別)
  4. AZ AからZまでの範囲の1文字(大文字と小文字を区別)
  5. g修飾子:グローバル。すべての一致(最初の一致では戻りません)





6

\wまたはを使用してください[:alpha:]。これは、単語に現れる可能性のある記号のみに一致するエスケープシーケンスです。


9
\wすべてのケースで良い解決策とは限りません。少なくともPCREでは、\w他の文字にも一致できます。PHPマニュアルの引用: " "単語 "文字は、任意の文字または数字またはアンダースコア文字、つまり、Perl"単語 "の一部となることができる任意の文字です。文字と数字の定義は、PCREの文字テーブルによって制御されます。ロケール固有のマッチングが行われている場合は異なる場合があります。たとえば、「fr」(フランス語)ロケールでは、アクセント付き文字に128より大きい文字コードが使用され、これらは\ w。 " によってマッチングされます。
Amal Murali 2014年

単語に文字からの他の文字が含まれている
V-SHY

2
\w文字と数字が一致することを意味します
Eugen Konkov

4

任意の文字エンコーディングの任意の文字を意味する場合は、スペース\s、数字などの非文字\d、および次のようなその他の特殊文字を削除することをお勧めします。

[!@#\$%\^&\*\(\)\[\]:;'",\. ...more special chars... ]

または、上記の否定の否定を使用して、文字を直接説明します。

\S \D and [^  ..special chars..]

長所:

  • すべての正規表現のフレーバーで動作します。
  • 書き込みが簡単で、時々多くの時間を節約できます。

短所:

  • 長く、完全ではない場合もありますが、文字エンコーディングも壊れる可能性があります。

4

この正規表現を試すことができます:[^\W\d_]または[a-zA-Z]


それが[^\W|\d]意味することではありません
OGHaza '25 / 07/25

1
[^\W|\d]ない\W、ない|、ない、という意味\dです。|はの一部であるため同じ効果があります\Wが、|は思ったように機能しません。それでもそれは_キャラクターを受け入れることを意味します。あなたは、おそらく探している[^\W\d_]
OGHaza

私はあなたに同意します、それは受け入れます_。ただし、「NOT」|は「AND 」と等しいため、次のことを[^\W|\d]意味します:NOT \W AND NOT\d
Motlab

12
[^ab] 意味しない ab[^a|b]ないa、ない|、ない、という意味bです。第二の例を与えるためには、[a|b|c|d]まったく同じである[abcd|||]とまったく同じである[abcd|]すべてがに等しい- 文字リテラルではなく、OR演算子です。OR演算子は、文字クラスの各文字間に暗黙的に含まれ、実際の意味では、クラスが(パイプ)文字を受け入れるようにします。([a]|[b]|[c]|[d]|[|])|||
OGHaza 14

1

最近、このパターンをフォームで使用して、文字、空白、アクセント記号などの特殊文字を含む人の名前を確認しました。

pattern="[A-zÀ-ú\s]+"

あなたはASCIIテーブルを見なければならない。A-zだけでなく、文字だけでなくÀ-ú
Toto

0

パターン= / [a-zA-Z] /

「[a-zA-Z]:#{pattern.match( "mine blossom")}」と表示されたらOK

「[a-zA-Z]:#{pattern.match( "456")}」と表示されます

「[a-zA-Z]:#{pattern.match( "")}」と表示されます

「[a-zA-Z]:#{pattern.match( "#$%^&*")}」と表示されます

「[a-zA-Z]:#{pattern.match( "#$%^&* A")}」と表示されたらOK


3
たとえば、「ZaZółćgęsląjaźń」はどうですか?
証人

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.