Linux 正規表現(Regex)チートシート
Linux Regular Expression(Regex) Cheat Sheet
Linuxの正規表現をサクっとチートシートにしてみました。参考にしてもらえれば幸いです。
特殊文字
記号 | 説明 | 使用例(一致する文字) |
---|---|---|
. | 任意の1文字にマッチ | a.c → abc, adc, a1c など |
^ | 行の先頭にマッチ | ^abc → 「abc」で始まる行 |
$ | 行の末尾にマッチ | abc$ → 「abc」で終わる行 |
* | 直前の文字の0回以上の繰り返し | ab*c → ac, abc, abbc, abbbc… |
+ | 直前の文字の1回以上の繰り返し | ab+c → abc, abbc, abbbc… |
? | 直前の文字の0回または1回の出現 | ab?c → ac, abc |
\ | 次の文字をエスケープ(特殊文字を通常の文字として扱う) | \. → ドット文字そのもの |
文字クラスと範囲
記号 | 説明 | 使用例(一致する文字) |
---|---|---|
[abc] | 括弧内のいずれか1文字にマッチ | [abc] → a, b, または c |
[^abc] | 括弧内以外の任意の1文字にマッチ | [^abc] → a, b, c 以外の任意の文字 |
[a-z] | 範囲指定(a から z の小文字) | [a-z] → 小文字のアルファベット1文字 |
[A-Z] | 範囲指定(A から Z の大文字) | [A-Z] → 大文字のアルファベット1文字 |
[0-9] | 範囲指定(0 から 9 の数字) | [0-9] → 任意の数字1文字 |
POSIX 文字クラス
記号 | 説明 | 使用例 |
---|---|---|
[:alnum:] | 英数字(アルファベットと数字) | [[:alnum:]] → a-z, A-Z, 0-9 のいずれか |
[:alpha:] | アルファベット | [[:alpha:]] → a-z, A-Z のいずれか |
[:ascii:] | ASCII文字 | [[:ascii:]] → ASCII文字セットのいずれか |
[:blank:] | 空白(スペースとタブ) | [[:blank:]] → スペースまたはタブ |
[:cntrl:] | 制御文字 | [[:cntrl:]] → 制御文字のいずれか |
[:digit:] | 数字 | [[:digit:]] → 0-9 のいずれか |
[:graph:] | 表示可能な文字(スペースを除く) | [[:graph:]] → スペース以外の表示可能な文字 |
[:lower:] | 小文字 | [[:lower:]] → a-z のいずれか |
[:print:] | 印字可能な文字(スペースを含む) | [[:print:]] → スペースを含む印字可能な文字 |
[:punct:] | 句読点 | [[:punct:]] → 句読点記号のいずれか |
[:space:] | 空白文字(スペース、タブ、改行など) | [[:space:]] → 空白文字のいずれか |
[:upper:] | 大文字 | [[:upper:]] → A-Z のいずれか |
[:word:] | 単語構成文字(英数字とアンダースコア) | [[:word:]] → a-z, A-Z, 0-9, _ のいずれか |
[:xdigit:] | 16進数の数字 | [[:xdigit:]] → 0-9, a-f, A-F のいずれか |
繰り返し指定
記号 | 説明 | 使用例(一致する文字) |
---|---|---|
{n} | 直前の文字をちょうどn回繰り返す | a{3} → aaa |
{n,} | 直前の文字をn回以上繰り返す | a{2,} → aa, aaa, aaaa… |
{n,m} | 直前の文字をn回以上m回以下繰り返す | a{2,4} → aa, aaa, aaaa |
選択と代替
記号 | 説明 | 使用例(一致する文字) |
---|---|---|
| | 選択(OR演算子) | cat|dog → 「cat」または「dog」 |
() | グループ化と部分式の作成 | (cat|dog)s → 「cats」または「dogs」 |
エスケープシーケンスと特殊表現
記号 | 説明 | 使用例(一致する文字) |
---|---|---|
\d | 数字一文字にマッチ([0-9]と同等) | \d{3} → 3桁の数字 |
\D | 非数字にマッチ([^0-9]と同等) | \D+ → 1文字以上の非数字 |
\w | 単語構成文字(英数字とアンダースコア)にマッチ([a-zA-Z0-9_]と同等) | \w+ → 1文字以上の単語構成文字 |
\W | 非単語構成文字にマッチ([^a-zA-Z0-9_]と同等) | \W+ → 1文字以上の非単語構成文字 |
\s | 空白文字にマッチ(スペース、タブ、改行等) | \s+ → 1文字以上の空白文字 |
\S | 非空白文字にマッチ | \S+ → 1文字以上の非空白文字 |
\b | 単語境界にマッチ | \bcat\b → 単語「cat」(caterpillarなどは含まない) |
\B | 非単語境界にマッチ | \Bcat\B → 「cat」が単語の中間にある場合 |
\n | 改行文字 | line\n → 「line」の後に改行がある場合 |
\t | タブ文字 | column\t → 「column」の後にタブがある場合 |
\r | キャリッジリターン | \r\n → Windows形式の改行 |
\f | フォームフィード | – |
\a | ベル(警告音) | – |
\e | エスケープ文字 | – |
\cX | 制御文字(Xは任意の文字) | \cM → Control+M(改行) |
\0 | NULL文字 | – |
\xhh | 16進数コードhhの文字 | \x41 → A |
\Ohh | 8進数コードhhhの文字 | \101 → A |
バックリファレンス
記号 | 説明 | 使用例 |
---|---|---|
\1 , \2 … | 前の括弧で囲まれたパターンを参照 | (abc)\1 → abcabc |
\k<name> | 名前付きキャプチャグループの参照(Perl互換) | (?<word>abc)\k<word> → abcabc |
Unicode と高度な表現(主にPerl互換正規表現で利用可能)
記号 | 説明 | 使用例(一致する文字) |
---|---|---|
\u | 4桁の16進数で指定したUnicode文字 | \u00A9 → © (著作権記号) |
\U | 8桁の16進数で指定したUnicode文字 | \U0001F600 → 😀 (笑顔の絵文字) |
\p{プロパティ} | 指定したUnicodeプロパティを持つ文字 | \p{Greek} → ギリシャ文字 |
\P{プロパティ} | 指定したUnicodeプロパティを持たない文字 | \P{Greek} → ギリシャ文字以外 |
\X | Unicode結合文字シーケンス | – |
先読み・後読み(Perlなどの拡張正規表現で利用可能)
記号 | 説明 | 使用例(一致する文字) |
---|---|---|
(?=pattern) | 肯定先読み(後ろにpatternがある場合にマッチ) | foo(?=bar) → 「foobar」の「foo」部分 |
(?!pattern) | 否定先読み(後ろにpatternがない場合にマッチ) | foo(?!bar) → 後ろに「bar」がない「foo」 |
(?<=pattern) | 肯定後読み(前にpatternがある場合にマッチ) | (?<=foo)bar → 「foobar」の「bar」部分 |
(?<!pattern) | 否定後読み(前にpatternがない場合にマッチ) | (?<!foo)bar → 前に「foo」がない「bar」 |
その他の特殊構文
記号 | 説明 | 使用例 |
---|---|---|
(?:pattern) | 非キャプチャグループ | (?:abc)+ → 「abc」の1回以上の繰り返し |
(?#comment) | コメント | abc(?#これはコメント)def |
(?imsxUJun) | オプション(フラグ)の設定 | (?i)abc → 大文字小文字を区別せず「abc」にマッチ |
正規表現のオプション(フラグ)
記号 | 説明 | 使用例 |
---|---|---|
/pattern/i | 大文字小文字を区別しない | /cat/i → 「cat」「Cat」「CAT」などにマッチ |
/pattern/g | グローバルマッチ(すべての一致を検索) | /a/g → すべての「a」にマッチ |
/pattern/m | マルチライン(^ と$ が各行の先頭と末尾にマッチ) | /^start/m → 各行の先頭の「start」にマッチ |
/pattern/s | ドット(. )が改行文字にもマッチ | /.*/s → 改行を含むすべての文字にマッチ |
/pattern/x | 拡張モード(空白を無視し、コメントを許可) | /pattern # コメント/x |
/pattern/u | Unicode対応 | /\p{Script=Greek}/u → ギリシャ文字にマッチ |
sed や vim などでの置換操作に特有の記号
記号 | 説明 | 使用例 |
---|---|---|
& | マッチした文字列全体を表す(置換時) | s/word/(&)/g → 「word」を「(word)」に |
\u | 次の文字を大文字に変換(置換時) | s/\b\w/\u&/g → 各単語の先頭を大文字に |
\l | 次の文字を小文字に変換(置換時) | s/WORD/\l&/ → 「WORD」を「wORD」に |
\U | 以降のすべての文字を大文字に変換(置換時) | s/word/\U&/ → 「word」を「WORD」に |
\L | 以降のすべての文字を小文字に変換(置換時) | s/WORD/\L&/ → 「WORD」を「word」に |
\E | \U または\L の効果を終了 | s/word/\U&\Eed/ → 「word」を「WORDed」に |
Linux ツールごとの正規表現の違い
ツール | 正規表現タイプ | 注意点 |
---|---|---|
grep | POSIX基本正規表現 | + , ? , {} などは\ でエスケープする必要がある |
grep -E /egrep | POSIX拡張正規表現 | + , ? , {} などを直接使用可能 |
grep -P | Perl互換正規表現 | \d , \w , \s , 先読み・後読みなどが使用可能 |
sed | POSIX基本正規表現 | + , ? , {} などは\ でエスケープする必要がある |
sed -E | POSIX拡張正規表現 | + , ? , {} などを直接使用可能 |
awk | 独自の拡張正規表現 | AWK固有の構文と制限がある |
perl | Perl互換正規表現 | 最も強力で多機能な正規表現をサポート |
注意点
- 基本正規表現(BRE)と拡張正規表現(ERE)では、特殊文字のエスケープが異なる
- Unicode関連の機能はすべてのツールでサポートされているわけではなく、主にPerl互換正規表現(PCRE)を使用するツールでのみ使用可能
- 利用するLinuxディストリビューションやツールのバージョンによって、サポートされる機能が異なる場合あり
まとめ
普段あまり使わないものは忘れがちで、探すのに手間取り、かえって時間がかかってしまうことが多々・・
おわり