1 はじめに
最近、仕事の関係で、正規表現を使用して特定の文字列と一致させる必要がある自動化スクリプトを作成する必要があるため、正規表現に関する情報をいくつか確認しました。それはデータに記載されています: *前の部分式と 0 または任意の回数一致します。そのとき疑問に思ったのは、* は一致する数を意味するのか、それとも任意の文字と一致するのかということです。私の印象では、* はどの文字にも一致する可能性があるからです。
情報を調べ続けた結果、正規表現とワイルドカードを混同していたことがわかりました。正規表現とワイルドカードの * の意味は異なります。
似たような文字があります: ?
2. 正規表現とワイルドカードの使用シナリオ
正規表現を使用するシナリオもあれば、ワイルドカードを使用する必要があるシナリオもあります。
Linux 環境でよく使用するので、シェル スクリプトを例に挙げてみましょう。
正規表現の使用シナリオ:
正規表現は主にファイル内の文字列を照合するために使用され、主な操作は grep、awk、および sed です。簡単に言えば、主にシェル スクリプトで使用される操作ファイルの特定の内容に焦点を当てています。
ワイルドカードの使用シナリオ:
ワイルドカードはファイル名置換とも呼ばれ、主にファイル名を照合し、関連する操作を実行するために使用され、主にシェル コマンド ラインで使用されます。一般的な操作は次のとおりです。
ls、find、cp、mv など。
要約すると、正規表現は主にシェル スクリプトで使用され、ワイルドカードは主にシェル コマンド ラインで使用されます。
3. 正規表現とワイルドカードの違い
3.1 ワイルドカードの基本的な使用法
ワイルドカードは主にシェルのコマンドラインで使用されます。一般的な一致ルールは次のとおりです。
ワイルドカード | 意味 | 例 |
* | 0 個以上の任意の文字と一致します | a* は、a で始まる任意のファイルに一致します |
? | 任意の 1 文字に一致します | a?.txt は ab.txt、ac.txt と一致しますが、abc.txt とは一致しません |
[] | 括弧内の任意の文字と一致します | [abc].txt は a.txt、b.txt、c.txt と一致します |
[!] | 括弧で囲まれていない任意の文字と一致します | [!abc]* は、abc で始まらない任意のファイルと一致します。 |
[az] | a ~ z に一致する任意の 1 文字は、ファイルの検索にのみ使用でき、ファイルの作成には使用できません。 | [az]* は az で始まる任意のファイルと一致します |
{a、b、z} | カンマ区切りは単一の文字を表し、ファイルの作成と検索に使用できます。 | {a,b,z}* は、a、b、または z で始まる任意のファイルを意味します |
{a..z} | .. 連続文字を区切って範囲を表します | {a..z}* は任意の小文字で始まるファイルを意味します |
特に、次の点に注意してください。
上の表には *? などの文字が含まれているため、[] などの文字には特別な意味 (用途) があり、たとえば * は文字そのものを表すのではなく、任意の文字を表すため、* 自体と一致させる必要がある場合はエスケープする必要があります。エスケープは \ で表されます。たとえば、
\* は * そのものを意味します。\*abc は文字列「*abc」と一致します。
理解を深めるために、いくつかのデモを次に示します。
現在のディレクトリの構造は次のとおりです。
ls [hs]* # 列出所有h或s开头的文件,包括h或s开头的文件夹内的文件
touch test{1..3}.txt # 创建text1到test3.txt
3.2 正規表現の基本的な使い方
正規表現は主にシェルスクリプトで使用されます。一般的な使用法は次のとおりです。
メタキャラクター | 意味 | 使用例 |
() | 単語の式を示します。括弧で囲まれているのは全体です。 | |
* | 前の部分式または文字は 0 または任意の回数一致します。 | ab* は、a、ab、abb、abb などに一致します。 h(ab)* は h または hab または habab と一致します |
? | 前の部分式または文字と 0 回または 1 回一致します。 | h(ab)* は h または hab に一致しますが、habab には一致しません |
+ | 前の部分式、拡張正規表現の 1 つ以上の出現 | |
。 | 改行を除く任意の 1 文字と一致します \n | |
[] | 括弧内の指定された文字のいずれかと一致します (1 文字のみ) | [aeiou] は Google で oe と一致します |
[^] | 括弧内にない任意の文字と一致します | |
^ | 行の先頭と一致します ([] 内にない場合) | ^hello は hello で始まる文字列と一致します。 |
$ | 行末と一致する | |
\ | エスケープ文字、特別な意味をキャンセルする | \ は文字 * と一致しますが、現時点では * は一致の数を示しません |
{n} | 前の文字が正確に n 回存在することを示します | |
{n,} | 前の文字が少なくとも n 回出現することを示します | |
{n,m} | 前の文字が n~m 回出現することを示します | |
\1 | 最初の左括弧と、対応する右括弧で囲まれたすべての内容を引用します。\2 は同じです |
ワイルドカード ルールと同様に、上記の表の特殊文字 (メタ文字) と一致する場合、それらもエスケープする必要があります。
たとえば、\* は * 文字自体を意味し、回数 * は前の文字が何度でも出現できるという意味ではなくなります。