助け合いフォーラム

LinuC

LinuC Lv1-101(Ver10.0)
問題ID : 14792
問題を開く
正規表現の「a.[^b]d」にマッチする文字列は次のうちどれか。(全て選択)

正解

abcd

abdd

aacd

解説

以下は主な正規表現とその使用例をまとめたものです。


正規表現の「a.[^b]d」は、1文字目が「a」、2文字目が任意の1文字、3文字目が「b」以外、4文字目が「d」の文字列を表しています。これらの条件を満たしている文字列は「abcd」、「abdd」、「aacd」です。

したがって正解は
・abcd
・abdd
・aacd
です。

正規表現はgrepコマンドなどで使用することができます。

例)「test.txt」ファイルから正規表現の「a.[^b]d」にマッチする文字列が含む行を抽出する場合


その他の選択肢については以下のとおりです。
・abd
全部で4文字必要ですので、誤りです。

・baad
1文字目が「a」ではありませんので、誤りです。

参考

正規表現とは、文字列の特定のパターンを認識する為に使用する表現方法です。文字列の検索や置換などを行う際に利用します。正規表現には基本正規表現(BRE: Basic Regular Expression)と拡張正規表現(ERE: Extended Regular Expression)があります。

以下は主な正規表現とその使用例をまとめたものです。


なお、正規表現の「*」と、シェルによって解釈されるメタキャラクタの「*」では意味が異なるので注意してください。シェルは「*」を0文字以上の文字列と解釈します。
正規表現は明示的に「'」(シングルクォーテーション)や「"」(ダブルクォーテーション)の引用符で囲う事ができます。これらの引用符で囲まれた正規表現の記号は、シェルにメタキャラクタとして扱われなくなります。

正規表現を利用する主なコマンドは以下のとおりです。

・grep
ファイルや標準入力から、検索パターンにマッチする文字列を含む行を抽出するコマンド
なお、「-E」オプションを併用すると拡張正規表現が使えます(egrepコマンドと同様)。

・sed
ファイルや標準入力の内容を編集して表示するコマンド

例1)1から5までのいずれかの文字がある行を「test.txt」ファイルから抽出する場合

$ grep '[1-5]' test.txt

例2)「test.txt」ファイルの「#」から始まる行を削除して出力する場合

$ sed '/^#/d' test.txt

基本正規表現と拡張正規表現の違いに注意してください。grepコマンドは、-Eオプションを付けないと検索パターンを基本正規表現と判断しますので、上表の拡張正規表現が使えません。

実行例)


基本正規表現では「?, +」は「\?, \+」とすることで、拡張正規表現と同様の意味を持つようになります。

上に戻る

「a.[^b]d」の^bの考え方

公開日 2023/11/24

解説文に、「a.[^b]d」で3文字目が「b」以外と記載されていますが、
^は行頭という意味の記号ですが、なぜ「b」以外と考えられるのか知りたいです。

2023/11/24 11:43

行頭を意味する^とは別の正規表現なのだそうです。
[の直後に^が記載されている場合、(つまり[^…](…は任意の文字)の場合、)…以外を意味すると下記HPに記載されていました。
https://www.tohoho-web.com/ex/regexp.html#one_of


コメント

この返信に対して
コメントを記入できます

この投稿に対して返信しませんか?