🔤
【正規表現】入門
はじめに
バリデーション(入力データチェック)やデータの検索・置換・抽出などに用いられる
「正規表現」について学習しましょう。
正規表現とは
正規表現は、文字列内の特定のパターンを検索したり置換したりするための表記方法です。
例えば、電話番号やメールアドレスなど、特定のフォーマットに一致する文字列を検索する際に利用します。
正規表現をテストするツール
正規表現の視覚化や、テストは以下のオンラインサービスが便利です。
Regex101の使い方は以下のページが参考になります。
Regex101の画面右下に「Quick Reference」があるので、本ページの学習にはない記述方法もわかります。
正規表現
基本パターン
正規表現の基本パターンです。
| パターン | 説明 | パターン例 | パターン例に マッチする文字列の例 |
|---|---|---|---|
. |
任意の1文字にマッチ |
a.b
|
aaba@ba1b
|
^ |
行の先頭にマッチ |
^abc
|
abcdefabc xyz
|
$ |
行の末尾にマッチ |
xyz$
|
abc xyz123 xyz
|
* |
直前の文字が 0回以上繰り返す |
ab*c
|
acabcabbbc
|
+ |
直前の文字が 1回以上繰り返す |
ab+c
|
abcabbbc
|
{n} |
直前の文字が n回繰り返す |
ab{3}c
|
abbbc |
{n,} |
直前の文字が n回以上繰り返す |
ab{3,}c
|
abbbcabbbbcabbbbbc
|
{n,m} |
直前の文字が n回以上、m回以下繰り返す |
ab{3,4}c
|
abbbcabbbbc
|
? |
直前の文字が 0回または1回の出現 |
ab?c
|
acabc
|
[] |
括弧内のいずれかの文字にマッチ |
[abc]
|
abc
|
[^] |
括弧内(先頭の^を除く)の文字以外にマッチ |
[^abc]
|
xyz
|
| |
いずれかのパターンにマッチ |
abc|xyz
|
abcxyz
|
() |
文字列をグループ化して取得 |
a(bc|xy)z
|
abczaxyz
|
エスケープ
.や*などの文字をそのまま表現したい場合は、バックスラッシュ(\)を前に付けてエスケープします。
例えば、\., \*のように使用します。
| パターン例 | パターン例 (イメージ) |
パターン例に マッチする文字列の例 |
|---|---|---|
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
|
123456
|
\D |
[^0-9] |
任意の数字以外の文字にマッチ |
\D\D
|
AB!@xy
|
\w |
[a-zA-Z0-9_] |
英数字とアンダースコアにマッチ |
\w\w
|
abA1_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 goodtesting
|
\B |
表現不可 | 単語の境界以外にマッチ |
\Btest\B
|
atteststesttestament
|
実践例
チェック
| 目的 | パターン | 結果 |
|---|---|---|
| 数値判定 |
^-?\d+(\.\d+)?$
|
≪OK≫-123456.789123456.789019≪NG≫ +123456.789A123456.789-123456..789
|
| 携帯番号判定 |
^(090|080|070)-\d{4}-\d{4}$
|
≪OK≫090-1234-5678080-1234-5678070-1234-5678090-9999-9999090-0000-0000≪NG≫ 060-1234-5678090-A234-5678090-1234-567090-123-567809012345678
|
検索
| 目的 | パターン | マッチする文字列 |
|---|---|---|
| ハッシュタグ検索 |
#[^\s#]*
|
#test#正規表現#はじめてのツイート
|
参考
関連書籍



Discussion