🔤
【正規表現】入門
はじめに
バリデーション(入力データチェック)やデータの検索・置換・抽出などに用いられる
「正規表現」について学習しましょう。
正規表現とは
正規表現は、文字列内の特定のパターンを検索したり置換したりするための表記方法です。
例えば、電話番号やメールアドレスなど、特定のフォーマットに一致する文字列を検索する際に利用します。
正規表現をテストするツール
正規表現の視覚化や、テストは以下のオンラインサービスが便利です。
Regex101の使い方は以下のページが参考になります。
Regex101の画面右下に「Quick Reference」があるので、本ページの学習にはない記述方法もわかります。
正規表現
基本パターン
正規表現の基本パターンです。
パターン | 説明 | パターン例 | パターン例に マッチする文字列の例 |
---|---|---|---|
. |
任意の1文字にマッチ |
a.b |
aab a@b a1b
|
^ |
行の先頭にマッチ |
^abc |
abcdef abc xyz
|
$ |
行の末尾にマッチ |
xyz$ |
abc xyz 123 xyz
|
* |
直前の文字が 0回以上繰り返す |
ab*c |
ac abc abbbc
|
+ |
直前の文字が 1回以上繰り返す |
ab+c |
abc abbbc
|
{n} |
直前の文字が n回繰り返す |
ab{3}c |
abbbc |
{n,} |
直前の文字が n回以上繰り返す |
ab{3,}c |
abbbc abbbbc abbbbbc
|
{n,m} |
直前の文字が n回以上、m回以下繰り返す |
ab{3,4}c |
abbbc abbbbc
|
? |
直前の文字が 0回または1回の出現 |
ab?c |
ac abc
|
[] |
括弧内のいずれかの文字にマッチ |
[abc] |
a b c
|
[^] |
括弧内(先頭の^ を除く)の文字以外にマッチ |
[^abc] |
x y z
|
| |
いずれかのパターンにマッチ |
abc|xyz |
abc xyz
|
() |
文字列をグループ化して取得 |
a(bc|xy)z |
abcz axyz
|
エスケープ
.
や*
などの文字をそのまま表現したい場合は、バックスラッシュ(\
)を前に付けてエスケープします。
例えば、\.
, \*
のように使用します。
パターン例 | パターン例 (イメージ) |
パターン例に マッチする文字列の例 |
---|---|---|
a\.b |
a.b |
|
\^abc |
^abc |
|
\^a\[b\.c\*d\+e\]f\|x\?yz\$ |
^a[b.c*d+e]f|x?yz$ |
特殊文字
正規表現では、特殊な意味を持つ文字があります。
これらの文字はパターン内で特定の文字やパターンにマッチングするために使用されます。
一部を除き、基本パターンで表現することも可能です。
特殊文字 | 基本パターン | 説明 | パターン例 | パターン例に マッチする文字列の例 |
---|---|---|---|---|
\d |
[0-9] |
任意の数字にマッチ |
\d\d |
12 34 56
|
\D |
[^0-9] |
任意の数字以外の文字にマッチ |
\D\D |
AB !@ xy
|
\w |
[a-zA-Z0-9_] |
英数字とアンダースコアにマッチ |
\w\w |
ab A1 _Z
|
\W |
[^a-zA-Z0-9_] |
英数字とアンダースコア以外の文字にマッチ |
\W\W |
#$ ?!
|
\s |
[ \t\n\r\f\v] |
空白文字にマッチ |
\s\s |
\t\t \r\n
|
\S |
[^ \t\n\r\f\v] |
空白文字以外の文字にマッチ |
\S\S |
ab !@ 12
|
\b |
表現不可 | 単語の境界にマッチ |
\btest\b |
test is good testing
|
\B |
表現不可 | 単語の境界以外にマッチ |
\Btest\B |
attest stest testament
|
実践例
チェック
目的 | パターン | 結果 |
---|---|---|
数値判定 |
^-?\d+(\.\d+)?$ |
≪OK≫-123456.789 123456.789 0 1 9 ≪NG≫ +123456.789 A123456.789 -123456. .789
|
携帯番号判定 |
^(090|080|070)-\d{4}-\d{4}$ |
≪OK≫090-1234-5678 080-1234-5678 070-1234-5678 090-9999-9999 090-0000-0000 ≪NG≫ 060-1234-5678 090-A234-5678 090-1234-567 090-123-5678 09012345678
|
検索
目的 | パターン | マッチする文字列 |
---|---|---|
ハッシュタグ検索 |
#[^\s#]* |
#test #正規表現 #はじめてのツイート
|
参考
関連書籍
Discussion