Regular Expressions
文字クラス
サーチ…
備考
シンプルなクラス
正規表現 | マッチ |
---|---|
[abc] | a 、 b 、またはc いずれかの文字 |
[az] | 任意の文字にa z 、 包括的 (これは、 範囲と呼ばれています) |
[0-9] | 任意の数字0 への9 、 包括的 |
共通のクラス
いくつかのグループ/文字の範囲は頻繁に使用され、特殊な略語があります:
正規表現 | マッチ |
---|---|
\w | 英数字とアンダースコア(「単語文字」とも呼ばれます) |
\W | 単語以外の文字( [^\w] と同じ) |
\d | 数字(ペルシャ数字、インドの数字などが含まれているため[0-9] よりも広い ) |
\D | 非数字( [^0-9] よりも短く 、ペルシャ桁を拒否している、インドのものなど) |
\s | 空白文字(空白、タブなど) 注 :エンジン/コンテキストによって異なる場合があります |
\S | 非空白文字 |
クラスを否定する
開始角括弧の後のキャレット(^)は、それに続く文字の否定として機能します。これは、文字クラスにないすべての文字と一致します。
ネゲートされた文字クラスも改行文字と一致するため、一致しない場合は、特定の改行文字をクラス(\ rおよび/または\ n)に追加する必要があります。
正規表現 | マッチ |
---|---|
[^AB] | 以外の任意の文字A とB |
[^\d] | 数字以外の文字 |
基礎
Team A
、 Team B
、...、 Team Z
ような名前のチームのリストがあるとします。次に:
-
Team [AB]
:Team A
またはTeam B
いずれかと一致します -
Team [^AB]
:これはTeam A
またはTeam B
を除くすべてのチームに一致します
私たちはしばしば、あるコンテキストまたは別のもの( A
からZ
までA
文字のような)で「属している」文字を一致させる必要があります。これが文字クラスの対象です。
異なる、類似した単語に一致する
文字クラス[aeiou]
考えてみましょう。この文字クラスは、同様の綴りの単語のセットに一致する正規表現で使用することができます。
b[aeiou]t
一致します:
- コウモリ
- ベット
- ビット
- ボット
- しかし
一致しない:
- 試合
- BTU
- bt
文字クラスは、一度に1つの文字だけに一致します。
英数字以外の照合(ネゲートされた文字クラス)
[^0-9a-zA-Z]
これは、数字でも文字でもない文字(英数字)と一致します。アンダースコア文字_
もネゲートされる場合、式は次のように短縮されます。
[^\w]
または:
\W
次の文章で:
こんにちは、どういうことですか?
私は2017年を待つことができない!
次の文字は一致します:
,
、、
'
、?
行末の文字が含まれています。
'
、、
!
行末の文字が含まれています。
ユニコードノート
Unicode文字プロパティをサポートするいくつかのフレーバは、 \w
と\W
を[\p{L}\p{N}_]
と[^\p{L}\p{N}_]
数字も含まれます( PCREドキュメントを参照)。ここにPCRE \w
テストがあります:
.NETでは、 \w
= [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Lm}\p{Mn}\p{Nd}\p{Pc}]
PCREとは異なり\p{Nl}
と\p{No}
とは一致しないことに注意してください( \w
.NETのドキュメントを参照)。
何らかの理由で、Unicode 3.1の小文字( 𝐚𝒇𝓌𝔨𝕨𝗐𝛌𝛚
)が一致しないことに注意してください。
Javaの(?U)\w
は、PCREと.NETで一致する\w
組み合わせと一致します。
非数字マッチング(ネゲートされた文字クラス)
[^0-9]
これは、ASCII桁ではないすべての文字と一致します。
Unicode数字もネゲートされる場合、フレーバー/言語の設定に応じて、次の式を使用できます。
[^\d]
これは以下に短縮することができます:
\D
u
修飾子を使用するか、または一部の言語でプログラムでUnicode文字プロパティのサポートを明示的に有効にする必要があるかもしれませんが、これは明らかではありません。インテントを明示的に伝達するには、次の構文を使用できます(サポートが利用可能な場合)。
\P{N}
定義上の意味:どのスクリプトでも数字ではない文字。否定された文字の範囲では、あなたは以下を使用することができます:
[^\p{N}]
次の文章で:
こんにちは、どういうことですか?
私は2017年を待つことができない!
次の文字が一致します。
,
、、
'
、?
、行末の文字とすべての文字(小文字と大文字)。
'
、、
!
、行末の文字とすべての文字(小文字と大文字)。
初心者が直面する文字クラスと一般的な問題
1.キャラクタークラス
文字クラスは[]
表され[]
。文字クラス内のコンテンツはsingle character separately
として扱われます。例えば、私たちが
[12345]
上記の例では、一致する1 or 2 or 3 or 4 or 5
意味します。簡単な言い方をすれば、それはor condition for single characters
( or condition for single characters
に対するストレス )として、 or condition for single characters
として理解することができ、
1.1注意の言葉
- 文字クラスでは、文字列を一致させるという概念はありません。したがって、regex
[cat]
を使用している場合、それは文字通りcat
という単語と一致する必要はありませんが、c
またはa
またはt
いずれかと一致する必要があることを意味します。これは、正規表現に新しい方の間に存在する非常に一般的な誤解です。 - 時には人々が使う
|
文字クラス内で(交互に)OR condition
が間違っていると思っています。例:[a|b]
を使うと[a|b]
実際にはa
または|
マッチa
ことを意味します|
(文字通り)またはb
。
2.文字クラスの範囲
文字クラスの範囲は-
記号で示されます。私たちは英語の内の任意の文字はアルファベットを見つけるしたいとするA
Z
。これは、次の文字クラスを使用して行うことができます
[A-Z]
これは任意の有効なASCIIまたはユニコードの範囲で行うことができます。最も一般的に使用される範囲は[AZ]
、 [az]
または[0-9]
です。さらに、これらの範囲は、文字クラスで
[A-Za-z0-9]
これは、範囲A to Z
またはa to z
または0 to 9
いずれかの文字と一致することを意味します。順序は何でもかまいません。したがって、あなたが定義する範囲が正しい限り、上記は[a-zA-Z0-9]
と同等です。
2.1注意の言葉
時々のための書き込み範囲に
A
Z
の人々はとしてそれを書く[Az]
これは、Z
代わりにz
を使用しているので、ほとんどの場合、間違っています。これは、ASCII範囲90
(Zの)の後に多くの意図しない文字を含むASCII範囲65
(Aの)から122
(zの)までの任意の文字にマッチすることを示します。 ただし 、特定の言語の照合順序が設定されている場合、[Az]
を使用してPOSIXスタイルの正規表現のすべての[a-zA-Z]
文字を一致させることができます。LC_COLLATE="en_US.UTF-8"
でCygwin上で[[ "ABCEDEF[]_abcdef" =~ ([Az]+) ]] && echo "${BASH_REMATCH[1]}"
を[[ "ABCEDEF[]_abcdef" =~ ([Az]+) ]] && echo "${BASH_REMATCH[1]}"
すると、ABCEDF
生成されます[[ "ABCEDEF[]_abcdef" =~ ([Az]+) ]] && echo "${BASH_REMATCH[1]}"
。LC_COLLATE
をC
設定した場合(Cygwinでは、export
で完了)、期待されるABCEDEF[]_abcdef
ます。意味
-
内部の文字クラスは特別です。上記の範囲を示します。 私たちが一致させたい場合は-
文字を文字通り?それ以外の場所に置くことはできません。それは、2文字の間に置かれた場合に範囲を示すことになります。そのケースでは、配置する必要があります-
のような文字クラスの開始で[-AZ]
など、文字クラスの最後に[AZ-]
またはescape it
あなたのような途中でそれを使用したい場合は[AZ\-az]
3.否定された文字クラス
否定された文字クラスは[^..]
示され[^..]
。キャレット記号^
は、文字クラスに存在する文字以外の文字と一致することを示します。例えば
[^cat]
c
またはa
またはt
以外の任意の文字と一致することを意味します。
3.1注意の言葉
- キャレット記号
^
の意味は、文字クラスの開始時にのみ否定にマッピングされます。文字クラス内の他の場所であれば、特別な意味を持たないリテラルキャレット文字として扱われます。 - 一部の人は
[^]
ような正規表現を書いています。ほとんどの正規表現エンジンでは、これはエラーを発生させます。その理由は、開始位置に^
を使用している場合、否定されるべき文字が少なくとも1つ必要であるためです。しかし、 JavaScriptでは、これは何にもマッチする有効な構文です(つまり、少なくともES5では発音記号は一致します)。
POSIX文字クラス
POSIX文字クラスは、特定の文字セットの事前定義されたシーケンスです。
文字クラス | 説明 |
---|---|
[:alpha:] | アルファベット文字 |
[:alnum:] | アルファベット文字と数字 |
[:digit:] | 数字 |
[:xdigit:] | 16進数 |
[:blank:] | スペースとタブ |
[:cntrl:] | 制御文字 |
[:graph:] | 表示される文字(スペースと制御文字以外のもの) |
[:print:] | 表示される文字とスペース |
[:lower:] | 小文字 |
[:upper:] | 大文字 |
[:punct:] | 句読点と記号 |
[:space:] | 改行を含むすべての空白文字 |
実装やロケールに応じて追加の文字クラスを利用できます。
文字クラス | 説明 |
---|---|
[:<:] | 言葉の始まり |
[:>:] | 単語の終わり |
[:ascii:] | ASCII文字 |
[:word:] | 文字、数字、アンダースコア。 \w 同等 |
ブラケットシーケンス(別名キャラクタクラス)を内部で使用するには、角括弧も含めてください。例:
[[:alpha:]]
これは1つの英字に一致します。
[[:digit:]-]{2}
これは、2桁の数字、つまり数字または-
一致します。以下が一致します:
-
--
-
11
-
-2
-
3-
詳しい情報は次のサイトで入手可能です: Regular-expressions.info