Как найти первую гласную в строке

Как найти первую гласную в строке

Я пытаюсь создать калькулятор на латинице, но застрял на определенной части. Допустим, у меня есть строка "apple". Чтобы преобразовать ее, вам просто нужно добавить "way" в конец, что даст вам "appleway". В настоящее время эта часть у меня готова.

Я застрял на чем-то вроде строки "sports". Для этого берешь согласные перед первой гласной, ставишь их в конец и добавляешь "ay", получая "ortsspay".

Мне сложно понять, как получить согласные перед первой гласной, чтобы правильно преобразовать строку.

решение1

С bashрасширением параметров:

${var%%[AaEeIiOoUu]*}
  • Шаблон [AaEeIiOoUu]*жадно ( %%) удаляет совпавшую часть из переменной varсправа, здесь начиная с любой заглавной или строчной гласной ( [AaEeIiOoUu]), за которой следует что-либо ( *)

Пример:

$ var=sports   
$ echo "${var%%[AaEeIiOoUu]*}"
sp

$ var=foobar
$ echo "${var%%[AaEeIiOoUu]*}"
f

решение2

$ echo "sports" | sed 's/.*\([a-z]\)[aeiouAEIOU].*/\1/'
p

слишком много подстановочных знаков;

$ echo "spozzzzzzzzzo" | sed 's/\([a-z]\)[aeiouAEIOU].*/\1/'
sp

@Fiximan, не уверен насчет этого;

$ echo "spozzzzzzzzzo" | sed 's/\(b-df-hj-np-tv-z\{1,\}\)[aeiou].*/\1/'
spozzzzzzzzzo

@Sundeep, да, это работает...

$ echo "spozzzzzzzzzo" | sed 's/\([^aeiou]*\).*/\1/i'
sp

Должен сказать, что я предпочитаю heemayl's, raw bash +1, здорово!

Связанный контент