---
title: "正規表現とは？文字クラスと繰返し記号の読み方【基本情報技術者試験】"
description: "正規表現を、文字列のパターンを表すルールとして整理し、文字クラス、繰返し、先頭・末尾、任意の1文字、選択、エスケープなどをFE科目A向けに解説します。"
last_modified_at: "2026-07-27"
canonical_url: "https://stemtazoo.github.io/fe/regular-expression/"
section: "fe"
---

## まず結論

正規表現とは、**文字列の並び方や形式を表すためのルール**です。

基本情報技術者試験では、正規表現を左から順に分解し、次の3点を確認します。

```text
1. どの文字を表すか
2. 何回繰り返すか
3. 文字列のどこを対象にするか
```

特に重要なのは、次の切り分けです。

```text
+
→ 1回以上

*
→ 0回以上

?
→ 0回または1回
```

`*` は0回でもよいため、直前の文字が一度も現れない文字列も条件を満たすことがあります。

## 直感的な説明

正規表現は、文字列に当てる**型紙**のようなものです。

例えば、次の正規表現を考えます。

```text
[A-Z]+[0-9]*
```

これは、次の2つの型紙をつないだものです。

```text
[A-Z]+
→ 英大文字が1文字以上

[0-9]*
→ 数字が0文字以上
```

したがって、次のような文字列が対象になります。

```text
A
ABC
ABC123
XYZ999
```

数字は0文字でもよいため、`ABC` も条件を満たします。

一方、正規表現中の `+` や `*` は、通常は文字そのものではありません。直前のパターンの繰返し回数を表します。

## 定義・仕組み

正規表現は、文字列の検索、抽出、置換、形式チェックなどで使われます。

### 文字クラス

角括弧 `[]` は、候補となる文字の集合を表します。

| 正規表現 | 意味 |
|---|---|
| `[A-Z]` | 英大文字1文字 |
| `[a-z]` | 英小文字1文字 |
| `[0-9]` | 数字1文字 |
| `[ABC]` | `A`、`B`、`C` のいずれか1文字 |
| `[^0-9]` | 数字以外の1文字 |

`[A-Z]` は、`A` と `Z` の2文字を表すのではなく、`A` から `Z` までの範囲から1文字を表します。

### 繰返しを表す記号

繰返し記号は、直前の文字や文字クラスに対して働きます。

| 記号 | 意味 |
|---|---|
| `*` | 0回以上 |
| `+` | 1回以上 |
| `?` | 0回または1回 |
| `{n}` | ちょうどn回 |
| `{n,}` | n回以上 |
| `{n,m}` | n回以上m回以下 |

例：

```text
[0-9]{3}
→ 数字がちょうど3文字
```

```text
[A-Z]?
→ 英大文字が0文字または1文字
```

### 先頭と末尾

`^` と `$` は、文字列の位置を表します。

| 記号 | 意味 |
|---|---|
| `^` | 文字列の先頭 |
| `$` | 文字列の末尾 |

例えば、次の正規表現は、文字列全体が数字3文字であることを表します。

```text
^[0-9]{3}$
```

`^` と `$` がない場合は、文字列の途中に一致するだけでも対象になることがあります。

### 任意の1文字

`.` は、多くの正規表現で**任意の1文字**を表します。

```text
A.C
```

この場合、`ABC`、`A1C`、`A-C` などが一致候補になります。

`.` は数字を表す記号ではありません。

### 選択とグループ化

`|` は、どちらか一方を表します。

```text
cat|dog
→ cat または dog
```

丸括弧 `()` は、複数の文字を一つのまとまりとして扱うときに使います。

```text
(ab)+
→ ab を1回以上繰り返す
```

### 特殊文字を文字として扱う

`.`、`+`、`*`、`?`、`(`、`)` などは、正規表現では特別な意味を持ちます。

これらを普通の文字として扱うときは、一般にバックスラッシュを付けてエスケープします。

```text
\+
→ 文字としてのプラス記号

\.
→ 文字としてのピリオド
```

なお、正規表現の細かな書き方は、UNIXコマンド、プログラミング言語、使用するライブラリによって異なる場合があります。問題文に規則が示されている場合は、その定義を優先して読みます。

公式の出題範囲やシラバスは、[IPA：基本情報技術者試験](https://www.ipa.go.jp/shiken/kubun/fe.html)から確認できます。

## 科目Aでどう出る？

科目Aでは、正規表現が表す文字列を選ぶ問題や、記号の意味を問う問題が出ます。

### 基本の読み方

例えば、次の正規表現を考えます。

```text
[A-Z]+[0-9]*
```

次のように分解します。

```text
[A-Z]
→ 英大文字1文字

+
→ 直前を1回以上

[0-9]
→ 数字1文字

*
→ 直前を0回以上
```

したがって、全体は次の意味です。

```text
英大文字が1文字以上
＋
数字が0文字以上
```

### 選択肢を切る判断表

| 選択肢の特徴 | 判断 |
|---|---|
| 先頭が数字だけ | `[A-Z]+` があるなら不一致 |
| `+` を文字として含む | `+` が繰返し記号なら不一致 |
| `*` を文字として含む | `*` が繰返し記号なら不一致 |
| 数字がない | `[0-9]*` なら一致する可能性がある |
| 数字が必ず必要 | `[0-9]+` なら正しい |
| 文字列全体の一致が必要 | `^` と `$` を確認する |

### 試験で押さえたい頻出パターン

#### 0回以上と1回以上

```text
A*
→ 空文字、A、AA、AAA ...
```

```text
A+
→ A、AA、AAA ...
```

`A*` はAが0文字でもよいですが、`A+` は少なくとも1文字必要です。

#### ちょうどn回

```text
[0-9]{4}
→ 数字4文字
```

郵便番号、年月、IDなどの形式を読む問題で使われます。

#### 先頭・末尾

```text
^[A-Z][0-9]+$
```

この場合、先頭は英大文字1文字で、その後に数字が1文字以上続き、そこで文字列が終わります。

#### 否定の文字クラス

```text
[^0-9]
→ 数字以外の1文字
```

`^` は、角括弧の外では文字列の先頭を表しますが、角括弧の先頭では否定を表します。

```text
^ABC
→ ABCで始まる

[^ABC]
→ A、B、C以外の1文字
```

#### 任意の1文字

```text
A.C
```

`.` は、AとCの間に任意の1文字があることを表します。

```text
ABC
A1C
A-C
```

などが一致候補になります。

#### 選択

```text
(yes|no)
→ yes または no
```

`|` は「または」を表します。

#### エスケープ

```text
[0-9]+\.[0-9]+
```

この場合、`\.` は任意の1文字ではなく、文字としてのピリオドを表します。

### 試験中の判断手順

```text
1. []で文字の種類を確認する
2. +、*、?、{}で回数を確認する
3. ^、$で位置を確認する
4. .、|、()の意味を確認する
5. 特殊文字そのものか、繰返し記号かを区別する
```

## どんな場面で使う？

正規表現は、文字列の形式を確認したり、必要な部分を抽出したりするときに使います。

例えば、次のような場面です。

- 郵便番号や電話番号の形式チェック
- ログから日付やエラーコードを抽出する
- ファイル名から特定の拡張子を探す
- 入力データから不要な文字を除く
- 大量の文章から特定の文字列パターンを検索する

ただし、正規表現は主に**文字列の形式**を確認するものです。

例えば、日付の形が `2026-02-30` のようになっていても、数字の並び方だけを確認する正規表現では、その日付が実際に存在するかまでは判断できません。

## よくある誤解・混同

### `*` は1回以上

誤りです。

```text
*
→ 0回以上

+
→ 1回以上
```

`*` は、対象が一度も現れなくても条件を満たします。

### 正規表現中の `+` や `*` は文字列にも必要

誤りです。

```text
+
*
?
```

これらは通常、直前のパターンの回数を表す記号です。

記号そのものを文字列に含めたい場合は、エスケープが必要です。

### `.` はピリオドを表す

通常は誤りです。

`.` は任意の1文字を表します。

文字としてのピリオドを表す場合は、一般に `\.` と書きます。

### `^` はいつでも文字列の先頭

誤りです。

```text
^ABC
→ ABCで始まる

[^ABC]
→ A、B、C以外の1文字
```

位置によって意味が変わります。

### 正規表現が一致すれば内容も正しい

誤りです。

正規表現は文字列の形を確認できますが、その値が現実に正しいかまでは保証しません。

### `[]` の中では複数文字を順番に表す

誤りです。

```text
[ABC]
```

これは `ABC` という3文字の並びではなく、A、B、Cのいずれか1文字を表します。

## まとめ（試験直前用）

- `[]` は文字の候補、`+`・`*`・`?`・`{}` は繰返し回数を表す
- `+` は1回以上、`*` は0回以上、`?` は0回または1回
- `^` は先頭、`$` は末尾。ただし `[^...]` の `^` は否定
- `.` は任意の1文字、`|` は選択、`()` はグループ化
- 特殊文字そのものを表すときは、一般にバックスラッシュでエスケープする
