
【Linux入門】正規表現
正規表現とは
正規表現(Regular Expression)は、文字列のパターンを表現するための特殊な文字列パターンのことです。テキスト処理や検索などで特定のパターンを見つけたり、置換したりする際に使用されます。
正規表現の主なメタキャラクタ
メタキャラクタ | 説明 |
---|---|
. | 任意の1文字にマッチ |
* | 直前のパターンが0回以上繰り返しにマッチする。 |
+ | 直前のパターンが1回以上繰り返しにマッチする。(拡張)* |
? | 直前のパターンが0回または1回繰り返しにマッチする。(拡張)* |
^ | 行の先頭にマッチする。 |
$ | 行の末尾にマッチする。 |
[] | 括弧内のいずれかの文字にマッチする。 |
() | グループ化し、後で参照できるようにする。 |
\ | エスケープ文字。特殊文字を普通の文字として扱う。 |
(拡張)*:「?」「+」は拡張正規表現です。grepコマンドで使用するには「-E」オプションを指定する必要があります。
正規表現の具体的な例
パターン | マッチする文字列の例 |
---|---|
ab* | "a", "ab", "abb", "abbb", ... |
a+b | "ab", "aab", "aaab", ... |
a?b | "ab", "b" |
.* | 0文字以上の文字列に一致する。 |
^start | "start of the line", "start123", ただし "notstart" は不一致。 |
end$ | "123end", ただし "endline" は不一致。 |
[aeiou] | "a", "e", "i", "o", "u" |
(abc)+ | "abc", "abcabc", ... |
[A-Z] | 大文字のアルファベットに一致する。 |
[0-9][0-9] | 2桁の数字に一致する。 |
\.txt$ | ファイル拡張子が ".txt" の文字列。 |
シェルのメタキャラクタとの違いについて
シェル(例: Bash)におけるメタキャラクタは、ワイルドカード(*
, ?
など)などであり、通常の文字列のマッチングに使用されます。これに対して、正規表現はより高度で柔軟で、特定のパターンの文字列を表現するために使用されます。正規表現は通常、検索や置換、パターンマッチングなどの用途で広く使用されます。シェルのメタキャラクタは、単一の文字やファイル名のパターンに適していますが、正規表現はより複雑な文字列パターンの処理に適しています。
シェルのメタキャラクタは通常、ファイル名のパターンやディレクトリ内のファイルの操作など、シンプルで一般的なタスクに使用されます。例えば、以下はシェルのメタキャラクタの一部です。シェルのメタキャラクタ「?」は、正規表現では「*」、シェルのメタキャラクタの「*」は正規表現では「.*」で表すため注意が必要です。
メタキャラクタ | 説明 |
---|---|
* | 0回以上の任意の文字にマッチする。 |
? | 1文字にマッチする。 |
[ ] | 指定された文字セット内の任意の1文字にマッチする。 |
シェルのメタキャラクタは、通常の文字列のパターンに対する単純なマッチングに使用され、ファイル名の展開やパターンに一致するファイルの操作などに便利です。
対照的に、正規表現は複雑な文字列パターンに対する柔軟で強力な検索や置換などに使用されます。正規表現は通常、テキスト処理やプログラミング言語の中でより高度な文字列処理が必要な場面で利用されます。
簡単に言えば、シェルのメタキャラクタは通常の文字列のパターンに対する簡単なマッチングに適しており、正規表現は複雑なパターンに対する高度な検索と置換に適しているといえます。