誰かこの表現を一つ一つ説明してもらえませんか?grep '\([aeiou]\).\1'

誰かこの表現を一つ一つ説明してもらえませんか?grep '\([aeiou]\).\1'

宿題でこの式を見つけました。これは、「母音 (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]、これは「文字aeio、 のいずれかu」を意味します。単一のドット 、.は「任意の単一の文字」を意味します。 は\1「最初のグループに一致したときに見つかったもの」を意味します。

関連情報