![誰かこの表現を一つ一つ説明してもらえませんか?grep '\([aeiou]\).\1'](https://rvso.com/image/89026/%E8%AA%B0%E3%81%8B%E3%81%93%E3%81%AE%E8%A1%A8%E7%8F%BE%E3%82%92%E4%B8%80%E3%81%A4%E4%B8%80%E3%81%A4%E8%AA%AC%E6%98%8E%E3%81%97%E3%81%A6%E3%82%82%E3%82%89%E3%81%88%E3%81%BE%E3%81%9B%E3%82%93%E3%81%8B%EF%BC%9Fgrep%20'%5C(%5Baeiou%5D%5C).%5C1'.png)
宿題でこの式を見つけました。これは、「母音 (a、e、i、o、または u) の後に 1 つの文字が続き、その後に同じ母音が再び続く行をすべて印刷します。したがって、「eve」または「adam」は見つかりますが、「vera」は見つかりません。」というものです。この式は正しく機能しますが、その仕組みをさらに理解できるように、各部分が何をするのかを説明してくれる人を探しています。
答え1
まず、正規表現のサイトを Google で検索してください。非常に役立ちます。たとえば、regexone を試してください。
次に、正規表現をテストしたり理解を深めたりするには、regex101.com を参照してください。これは、何が起こるかを段階的に説明しているため、非常に役立ちます。また、正規表現をテストすることもできます。
さて、表現についてですが、
[aeiou]
括弧内のいずれかの文字と一致します (ここでは、a、e、i、o、または u)。
.
任意の1文字に一致する
\1
最初のキャプチャ グループと一致します。
\(anything\)
キャプチャグループです。
キャプチャ グループは、後で使用するために覚えておくことができる文字列の名前です。この場合、[aeiou] から任意の文字をキャプチャすると、一致したものを記憶できます。代わりに次の正規表現を記述すると:
[aeiou].[aeiou]
最初の母音と 2 番目の母音が同じかどうかを確認する方法がありません。
したがって、正規表現は「「aeiou」の文字の 1 つに一致し、次に任意の 1 文字に一致し、最後に最初の文字に一致する」ことを意味します。
答え2
まず、 と\(
です\)
。これは、「これらのエスケープされた括弧内のものはすべてグループであり、式の中で後でそのように参照できる」ことを意味します。その中に があり[aeiou]
、これは「文字a
、e
、i
、o
、 のいずれかu
」を意味します。単一のドット 、.
は「任意の単一の文字」を意味します。 は\1
「最初のグループに一致したときに見つかったもの」を意味します。