はじめに
パターンマッチング。文字列処理において非常に重要な技術ですが、皆さんは、正規表現(Regular Expressions)とワイルドカード(Wildcard)の違いとそれぞれについて答えられますか?
自身の中で混同していたので調べてまとめてみました。そんな記事です。
正規表現 (Regular Expressions)
概要
正規表現は、文字列のパターンを高度かつ柔軟に検索・マッチングするための強力なツールです。
プログラミング、テキスト処理、データ検証など、幅広い分野で活用されています。
基本文法と主な特殊文字
文字 | 意味 | 例 | マッチする文字列 |
---|---|---|---|
. |
任意の1文字 | a.c |
abc , adc , a1c
|
* |
0回以上の繰り返し | ab*c |
ac , abc , abbc
|
+ |
1回以上の繰り返し | ab+c |
abc , abbc , abbbc
|
? |
0回か1回 | colou?r |
color , colour
|
^ |
行の先頭 | ^Start |
"Start of line" |
$ |
行の末尾 | end$ |
"This is the end" |
[] |
文字クラス | [aeiou] |
a , e , i , o , u
|
[^] |
否定の文字クラス | [^0-9] |
数字以外の文字 |
{n} |
ちょうどn回の繰り返し | a{3} |
aaa |
{n,} |
n回以上の繰り返し | a{2,} |
aa , aaa , aaaa
|
{n,m} |
n回からm回の繰り返し | a{2,4} |
aa , aaa , aaaa
|
\d |
数字 | \d{3} |
123 , 456
|
\w |
単語文字 | \w+ |
hello , 123_abc
|
\s |
空白文字 | hello\s world |
hello world , hello world
|
\D |
非数字 | \D+ |
abc , Hello
|
\W |
非単語文字 | \W+ |
!@# ,
|
\S |
非空白文字 | \S+ |
hello , 123
|
() |
グループ化 | (ab)+ |
ab , abab , ababab
|
| |
選択(OR) | cat|dog |
cat , dog
|
使用例
メールアドレスのバリデーション
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
電話番号のバリデーション
^\+?(\d{10,14})$
主な用途
- データ検証(メール、電話番号、郵便番号など)
- テキスト検索と置換
- スクレイピングとデータ抽出
- ログ解析
など
ワイルドカード (Wildcard)
概要
ワイルドカードは、簡単で直感的なパターンマッチング方法です。
主にファイル管理やシェルコマンドで使用されます。
主な特殊文字
文字 | 意味 | 例 | マッチする文字列 |
---|---|---|---|
* |
任意の文字列(0文字以上) | *.txt |
report.txt , data.txt
|
? |
任意の1文字 | file?.txt |
file1.txt , fileA.txt
|
[] |
文字セット | [aA]*.txt |
apple.txt , Article.txt
|
使用例
ファイル検索
-
*.log
: すべてのログファイル -
report_????.xlsx
: 4桁の数字を含むレポートファイル -
[0-9]*.csv
: 数字で始まるCSVファイル
主な用途
- ファイルとディレクトリの検索
- バッチ処理
- シェルスクリプト
- 簡単なファイルパターンマッチング
正規表現 vs ワイルドカード
主な違い
柔軟性
- 正規表現: 非常に柔軟で複雑なパターンを表現可能
- ワイルドカード: シンプルで直感的だが、限定的
複雑さ
- 正規表現: 学習コストが高い
- ワイルドカード: すぐに理解できる
用途
-
正規表現:
- データ検証
- 高度な文字列処理
- テキスト解析
-
ワイルドカード:
- ファイル検索
- 単純なパターンマッチング
まとめ
正規表現とワイルドカードは、それぞれ異なる強みを持つパターンマッチングツールです。
目的と複雑さに応じて適切な方法を選択するといいでしょう。
この記事で「それぞれの違いが分かるようになったぜ!」って人が増えると幸いです。