5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RCC (立命館コンピュータークラブ)Advent Calendar 2024

Day 5

ワイルドカードと正規表現の違い、言えますか?

Last updated at Posted at 2024-12-05

はじめに

パターンマッチング。文字列処理において非常に重要な技術ですが、皆さんは、正規表現(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})$

主な用途

  • データ検証(メール、電話番号、郵便番号など)
  • テキスト検索と置換
  • スクレイピングとデータ抽出
  • ログ解析

など

プログラミング言語での使用

Python

  • reモジュールを使用
  • データ検証、文字列操作などに広く利用
  • 複雑な文字列処理に最適

その他の言語

  • JavaScript: match(), test() メソッド
  • Java: Pattern, Matcher クラス
  • PHP: preg_match(), preg_replace()
  • Ruby: 言語組み込みの正規表現サポート

コマンドライン・シェルでの使用

  • grep: テキスト検索
  • sed: ストリーム編集
  • awk: テキスト処理
  • find: ファイル検索

ワイルドカード (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ファイル

主な用途

  1. ファイルとディレクトリの検索
  2. バッチ処理
  3. シェルスクリプト
  4. 簡単なファイルパターンマッチング

シェル・コマンドライン

  • Bash, Zsh等のシェルスクリプト
    例:
    • ls *.txt
    • cp report_*.csv /backup/

プログラミング言語での使用

  • ファイルパス操作
  • 簡易的なパターンマッチング
  • Pythonのglobモジュール
  • Pythonのpathlibモジュール

正規表現 vs ワイルドカード

主な違い

柔軟性

  • 正規表現: 非常に柔軟で複雑なパターンを表現可能
  • ワイルドカード: シンプルで直感的だが、限定的

複雑さ

  • 正規表現: 学習コストが高い
  • ワイルドカード: すぐに理解できる

用途

  • 正規表現:
    • データ検証
    • 高度な文字列処理
    • テキスト解析
  • ワイルドカード:
    • ファイル検索
    • 単純なパターンマッチング

まとめ

正規表現とワイルドカードは、それぞれ異なる強みを持つパターンマッチングツールです。
目的と複雑さに応じて適切な方法を選択するといいでしょう。

この記事で「それぞれの違いが分かるようになったぜ!」って人が増えると幸いです。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?