![Может ли кто-нибудь объяснить это выражение по частям? grep '\([aeiou]\).\1'](https://rvso.com/image/89026/%D0%9C%D0%BE%D0%B6%D0%B5%D1%82%20%D0%BB%D0%B8%20%D0%BA%D1%82%D0%BE-%D0%BD%D0%B8%D0%B1%D1%83%D0%B4%D1%8C%20%D0%BE%D0%B1%D1%8A%D1%8F%D1%81%D0%BD%D0%B8%D1%82%D1%8C%20%D1%8D%D1%82%D0%BE%20%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BF%D0%BE%20%D1%87%D0%B0%D1%81%D1%82%D1%8F%D0%BC%3F%20grep%20'%5C(%5Baeiou%5D%5C).%5C1'.png)
Я нашел это выражение для домашнего задания, которое «выведет все строки, содержащие гласную (a, e, i, o или u), за которой следует один символ, за которым снова следует та же гласная. Таким образом, оно найдет «eve» или «adam», но не «vera». Выражение работает правильно, но я ищу того, кто сможет объяснить, что делает каждая часть, чтобы я мог лучше понять, как это работает.
решение1
Прежде всего, погуглите regex sites. Они вам очень помогут. Например, попробуйте regexone.
Во-вторых, чтобы протестировать или разобраться в регулярных выражениях, обратитесь к regex101.com — это может вам очень помочь, поскольку там пошагово объясняется, что происходит; вы также можете тестировать регулярные выражения.
Теперь что касается выражения:
[aeiou]
соответствует любому из символов в скобках (здесь: a, e, i, o или u).
.
соответствует любому отдельному символу
\1
соответствует первой группе захвата.
\(anything\)
это группа захвата.
Группа захвата — это имя строки, которую вы можете запомнить для дальнейшего использования. В этом случае захват любого символа из [aeiou] позволяет нам запомнить, что мы сопоставили. Если бы мы написали это регулярное выражение вместо этого:
[aeiou].[aeiou]
у нас не было бы возможности проверить, совпадают ли первая и вторая гласные.
Итак, ваше регулярное выражение означает «Сопоставить все, что является одним из символов из «aeiou», затем любой одиночный символ, а затем первый символ».
решение2
Во-первых, \(
and \)
. Это означает «все, что находится внутри этих экранированных скобок, является группой и может быть упомянуто как таковое позже в выражении». Внутри этого у вас есть [aeiou]
, что означает «любой из символов a
, e
, i
, o
или u
«. Одна точка, .
, означает «любой отдельный символ». The \1
означает «То, что вы нашли, когда сопоставили первую группу».