この記号の意味は何?サンプルでわかる正規表現と一覧表
- 作成日:2018/10/29
正規表現についてわかりやすく解説します。 色々なところで登場するので1度マスターしておけば何かと便利です。
一覧表
正規表現で使うメタ文字の一覧表です。 ここでは簡潔にまとめているため、 詳細説明は後ほどご紹介します。
基本
1文字のメタ文字一覧です。各メタ文字の詳しい説明は基本的なメタ文字を参照下さい。
メタ文字 | 意味 | 例 | ヒットする検索ワード |
---|---|---|---|
. | 任意の1文字 | 今日は.だ | 今日は雨だ |
* | 0回以上の繰り返し | 勉強は超*嫌だ | 勉強は超超嫌だ |
+ | 1回以上の繰り返し | 勉強は超*嫌だ | 勉強は超超嫌だ |
? | 文字なしか1回出現 | 私は東京都?出身 | 私は東京都出身 |
^ | 行頭 | ^東京都 | 東京都は人が多い |
$ | 行末 | 東京都$ | 人が多い東京都 |
| | AまたはB | 東京 | 神奈川 | 東京は人が多い |
[ ] | 囲まれたどれか1文字 | 方角は[東西南北]だ | 方角は東だ |
\ | エスケープする | \^と\*の意味を知る | ^と*の意味を知る |
応用
メタ文字を組み合わせて使う文字列一覧です。より詳しい説明はメタ文字の応用を参照下さい。
メタ文字 | 意味 | 例 | ヒットする検索ワード |
---|---|---|---|
.* | 任意の文字列 | 今日は.*だ | 今日はとても幸せだ |
^ $ | 完全一致 | ^本日は晴天なり$ | 本日は晴天なり |
[a-zA-Z0-9] | アルファベットまたは数値 | 登録番号は[a-zA-Z0-9]だ | 登録番号は1だ |
[^a-zA-Z0-9] | アルファベットまたは数値以外 | 性別は[^a-zA-Z0-9]だ | 性別は女だ |
正規表現とは
正規表現とは長い複雑な文字列を簡単な1つの文字列で表現することです。
- 今日はAさんとBさんとCさんが来店します
- 今日は.*が来店します
1が通常の書き方ですが、これを正規表現で表現すると2のように簡単になります。 この例だと「AさんとBさんとCさん」を「.*」で表現していますね。
「.*」は1文字ではないというツッコミがあるかもですが、 1つの文字「列」なので1文字というわけではないのです。
「 . 」や「 * 」など、特殊な意味をもつ文字をメタ文字といいます。
使い方
正規表現は色々なところで登場しますが、よく使われるのが検索や置換するときです。 うまく使えば複雑な文字列を簡単に一括置換できたりする便利なものです。
例えば以下のような文章があるとします。
- 10月1日は朝礼があります。
- 10月3日は送迎会があります。
- 10月10日は会議があります。
- 10月31日は休日です。
後から日付は不要となったとしましょう。 10月の後ろが1日だったり3日だったするので、通常の置換では一括でできません。 そこで、正規表現を使ってこのように置換します。
- 置換前:10月.*日
- 置換後:10月
すると、以下のように一括で置換できます。
- 10月は朝礼があります。
- 10月は送迎会があります。
- 10月は会議があります。
- 10月は休日です。
このように、1日や3日を正規表現を使い「.*」と表現することで簡単に置換できるようになります。
正規表現にはたくさんの種類がありますが、全て暗記する必要はありません。使いたい時に調べて活用すれば良いでしょう。
次項からは様々な正規表現をご紹介していきます。
基本的なメタ文字
正規表現で使われる基本的なメタ文字の紹介です。
調べたい以下のメタ文字をクリックすると説明にジャンプします。
任意の1文字を意味する「 . 」
「 . 」は何でもよい1文字を意味します。
検索ワード | ヒットするワード |
---|---|
今日は.だ | 今日は雨だ |
今日はAだ | |
今日は0だ |
任意の1文字は漢字・ひらがな・英語・数値など何でも良いです。 ただし改行文字を表すことはできません。
0回以上の繰り返しを意味する「 * 」
「 * 」は直前の文字を繰り返す意味を持ちます。繰り返す回数は何回でも良いです。
検索ワード | ヒットするワード |
---|---|
勉強は超*嫌だ | 勉強は嫌だ(0回繰り返し) |
勉強は超嫌だ(1回繰り返し) | |
勉強は超超嫌だ(2回繰り返し) | |
勉強は超超超嫌だ(3回繰り返し) |
0回だとないものと同じですね。この場合でも検索ではヒットします。
1回以上の繰り返しを意味する「 + 」
「 + 」は直前の文字を繰り返す意味をもちます。 「 * 」と似ていますが繰り返す回数が異なり、こちらは1回以上の繰り返しです。
検索ワード | ヒットするワード |
---|---|
勉強は超+嫌だ | 勉強は超嫌だ(1回繰り返し) |
勉強は超超嫌だ(2回繰り返し) | |
勉強は超超超嫌だ(3回繰り返し) |
直前の文字が含まないワードはヒットしないということですね。
文字なしか1つだけを意味する「 ? 」
「 ? 」という疑問符は直前の文字が全くない、もしくは1回だけ存在するという意味をもちます。
検索ワード | ヒットするワード |
---|---|
私は東京都?出身 | 私は東京出身(文字なし) |
私は東京都出身(1回だけ) |
「 ? 」の直前である「都」を省略するか、もしくは1回だけ出現するワードが検索ヒットします。
行頭を意味する「 ^ 」
「 ^ 」は行の始めという意味をもちます。 先頭行の文字を検索したいときによく使用されます。
検索ワード | ヒットするワード |
---|---|
^東京都 | 東京都は人が多い |
東京都出身です |
「東京都」から始まるのは全て検索ヒットしますが、「私は東京都出身」など行の途中だとヒットしません。
行末を意味する「 $ 」
「 $ 」は行の終わりという意味をもちます。 行末尾の文字を検索したいときによく使用されます。
検索ワード | ヒットするワード |
---|---|
東京都$ | 人が多い東京都 |
出身は東京都 |
「東京都」で終わるのは全て検索ヒットしますが、「私は東京都出身」など行の途中だとヒットしません。
「または」を意味する「 | 」
「 | 」は区切られた文字のいずれかを意味します。 「A|B」でAまたはBという条件ですね。
検索ワード | ヒットするワード |
---|---|
東京 | 神奈川 | 東京は人が多い。 |
来週は神奈川県に旅行に行きます。 | |
神奈川生まれだけど、育ちは東京です。 |
「 | 」の左右にあるどちらか(もしくは両方)のワードがあれば検索ヒットします。 また、どちらが先にきても構いません。
文字をグループ化する「 ( ) 」
括弧「 ( ) 」は文字をグループ化してまとめます。
検索ワード | ヒットするワード |
---|---|
勉強は(超絶)*嫌だ | 勉強は超絶嫌だ(1回繰り返し) |
勉強は超絶超絶嫌だ(2回繰り返し) |
「 * 」は直前の1文字を繰り返すので「 ( ) 」がなければ「絶」のみが繰り返されます。 しかし、「 ( ) 」でグループ化することで繰り返されるのは「超絶」という文字列になるのです。
どれか1文字を意味する「 [ ] 」
「 [ ] 」は囲まれたどれか1文字を意味します。
検索ワード | ヒットするワード |
---|---|
方角は[東西南北]だ | 方角は東だ |
方角は西だ | |
方角は南だ | |
方角は北だ |
よく使われるのは[A-Z]という書き方です。A-Zは全てのアルファベット(A・B・C・・・Z)を意味するので、 [A-Z]の意味することは「何でも良いのでアルファベット1文字」となります。
[A-Z]は [ABCDEFGHIJKLMN・・]と1つずつ記述しても同じ意味です。
また、「 [ ] 」内のメタ文字は全て普通の文字として扱われます。
- これは.だ・・・メタ文字「 . 」は「任意の1文字」という特殊な意味をもつ
- [これは.だ]・・・メタ文字「 . 」は普通の文字として扱う
つまり、「 [ ] 」ではメタ文字は使えないということです。 ただし、「 ^ 」は例外的に特殊な意味をもつ場合があります。 詳しくは「 [ ]」と「 ^ 」の併用を参照ください。
特殊文字をエスケープする「 \ 」
「 \ 」(バックスラッシュ)は 直後にあるメタ文字を通常の文字として扱います。 専門的な言い方で「エスケープする」ともいいますね。
メタ文字は今までで紹介したように特殊な意味を持つので、メタ文字を普通の文字として扱いたい場合は「 \ 」の後に記述します。
検索ワード | ヒットするワード |
---|---|
私は\^と\*の意味を知りたい | 私は^と*の意味を知りたい |
本来は「 ^ 」は先頭行、「 * 」は繰り返しを意味しますが、 「 \ 」をつけることで普通の文字として扱うことができます。
また、メタ文字「 [ ] 」の中は「 \ 」を使用しなくても全て通常の文字として扱うので、 わざわざ「 \ 」をつける必要はありません。
メタ文字の応用
メタ文字は1つだけで使用することもありますが、複数のメタ文字を組み合わせて使うことも多々あります。 ここでは、複数のメタ文字を利用した使い方をご紹介します。
何でも良い文字列を意味する「 .* 」
「 . 」は任意の1文字、「 * 」 は直前の文字を繰り返すので「 .* 」は 何でも良い1文字を好きな回数だけ繰り返すという意味になります。つまり何の文字列がきても良いのです。 あいまい検索などでよく使われます。
検索ワード | ヒットするワード |
---|---|
私の趣味は.*です | 私の趣味はサッカーです |
私の趣味はバレーとバスケットです | |
私の趣味は特にないです |
「 .* 」の箇所は何がくるかわからないけど、その前後の文字はわかるので検索したい時に使います。 「 .* 」の文字長も問いません。
完全一致する行を意味する「 ^ $ 」
「 ^ 」は行頭、「 $ 」は行末を意味するで 「 ^ と $ の組み合わせ」は 「 ^ 」で始まり「 $ 」で終わる文字列のみの行という意味になります。 完全一致の文字列を探したい時などに使われます。
検索ワード | ヒットするワード |
---|---|
^本日は晴天なり$ | 本日は晴天なり |
1文字でも別の文字が含まれれば検索でヒットしません。 ピンポイントで「この文字列の行を検索したい」時などに使いましょう。
アルファベット・数値以外を意味する「 [^a-zA-Z0-9] 」
A~Zまでのアルファベットや0~9までの数値は以下のように表現できます。
- [a-z]・・・小文字のアルファベット1文字
- [A-Z]・・・大文字のアルファベット1文字
- [0-9]・・・数値1文字
これはまとめて書けるので同時に書くと[a-zA-Z0-9]となります。
つまり、[a-zA-Z0-9]は 小文字・大文字のアルファベットまたは数値である1文字を意味します。
「 ^ 」は単独だと行頭を意味しますが「 [ ] 」内の先頭で使うと「以外」という意味になるので [^a-zA-Z0-9]は小文字・大文字のアルファベットもしくは数値以外となります。
検索ワード | ヒットするワード |
---|---|
性別は[^a-zA-Z0-9]で登録番号は[a-zA-Z0-9]*だ | 性別は女で登録番号はA2fr3Deだ |
[a-zA-Z0-9]だけでは1文字だけなので、 「A2fr3De」のように複数文字を表現するには「 * 」で繰り返せば 任意の文字数のアルファベットまたは数値となります。
「 [ ]」と「 ^ 」の併用
「 ^ 」は使い方によっては複数の意味をもつので注意が必要です。
- 普通に使う・・・「先頭行」を意味する
- [ ]の先頭で使う・・・「以外」という否定的な意味になる
- [ ]の先頭以外で使う・・・通常の文字として扱う
普通に使う場合は行頭を意味する「 ^ 」を参照ください。
注意しなければならないのは「 [ ] 」と併用するときです。 「 [ ] 」で囲まれたメタ文字は通常の文字として扱うと紹介しましたが、 「 ^ 」は少し特殊です。
「 [ ] 」の先頭以外で「 ^ 」を記述すれば 通常の文字として扱いますが、先頭で記述すると「以外」という否定の意味になるのです。
挿入位置 | 例 | 意味 |
---|---|---|
先頭 | [^abc] | a以外,b以外,c以外のいずれか1文字 |
先頭以外 | [abc^] | a,b,c,^のいずれか1文字 |
「 [^abc ] 」は言い換えれば「aでもbでもcでもない1文字」ということです。 このように、「 ^ 」は使う場所により意味が異なってくるのでご注意ください。