#正規表現とは
特殊な文字を組み合わせてパターンを作ることで、ある文字列に特定の文字が含まれているかを確認することや、特定の文字を取り除くなどの操作を行うことができます。
##正規表現の記号と意味
記号 | 記号の説明 | 例 | 例の説明 |
---|---|---|---|
. | 任意の一文字 | .+ | 任意の文字列と一致 |
* | 直線の一文字の0回以上の繰り返しと一致 | ruby* | rubyもしくはrubyy..と一致 |
^ | 行の先頭 | ^[a-z] | 行頭が小文字のアルファベットと一致 |
$ | 行の文末 | rb$ | 文末がrbと一致 |
[] | []内の任意の文字と一致 | [a-z] | 小文字のアルファベットと一致 |
[^] | []内の任意の文字と不一致 | [^a-z] | 小文字のアルファベット以外と一致 |
+ | 直前の文字の1個以上の繰り返し | cs+ | CSS..と一致 |
? | 直前の文字が0個または1個以上の場合一致 | Windows? | WindowまたはWindowsと一致 |
{} | {}内の数値の繰り返しと一致 | {n} | 直前の文字のn個の繰り返しと一致 |
{} | {}内の数値の繰り返しと一致 | {,n} | 直前の文字のn個以下の繰り返しと一致 |
{} | {}内の数値の繰り返しと一致 | {m,} | 直前の文字のm個以上の繰り返しと一致 |
{} | {}内の数値の繰り返しと一致 | {m,n} | 直前の文字のm個以上、n個以下のの繰り返しと一致 |
| | |の直前と直後どれかに一致 | Ruby|Java | RubyまたはJavaに一致 |
() | カッコ内をグループ化 | - | - |
文字を表す正規表現
記号 | 意味 |
---|---|
. | 任意の1文字 |
\d | 数字1文字 |
\D | 数字以外1文字 |
\w | アルファベット、数字、アンダスコア( _ )のどれかの1文字 |
\W | アルファベット、数字、アンダスコア以外の1文字 |
\s | 半角スペース、タブ、改行のどれか1文字 |
\S | 半角スペース、タブ、改行以外のどれか1文字 |
\t | タブ |
\r | キャリッジリターン(カーソルを文頭に戻す) |
\b | 単語の境界 |
\文字 | 特殊文字のエスケープ |
##正規表現の使い方
正規表現をプログラミングする方法は2種類あります。
1、正規表現のパターンを直接指定するリテラルを使用する方法
2、コンストラクタを使用する方法
###1、正規表現のパターンを直接指定するリテラルを使用する方法
例えば携帯電話番号のフォーマットチェックを行う場合は、以下のように使用します。
var phone_number = /^\d{3}-?\d{4}-?\d{4}$/;
^\d{3}-?\d{4}-?\d{4}$を先頭から
1. ^\d{3}
2. -?
3. \d{4}
4. -?
5. \d{4}$
に分解してみていきます。
- 先頭が数字が連続して3文字となっているかをチェックします。
- ハイフンあり・なしどちらで入力されてもいいように、-の後ろに?がつきます。
- 1とほぼ同じで、数字が連続して4文字となっているかをチェックします。ここは先頭ではないため、^は不要です。
- 2と同様
- 1、3とほぼ同様ですが、末尾なので、$がつきます。
###2、コンストラクタを使用する方法
以下のように、RegExpの引数に文字列の正規表現を指定して使用します。
var phone_number = new RegExp('^\d{3}-?\d{4}-?\d{4}$');
##どちらの方法を使用したほうが良いのか
プログラムの途中で正規表現のパターンが変更される場合や外部から取得される場合は、RegExpコンストラクタを使用するほうが良いとされています。
逆に、正規表現のパターンが全く変わらないのであれば、直接リテラルを使用するほうが良いとされています。