Я нашел это выражение для домашнего задания, которое «выведет все строки, содержащие гласную (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
означает «То, что вы нашли, когда сопоставили первую группу».