文字列で最初のコレクションを見つける方法

文字列で最初のコレクションを見つける方法

豚ラテン語の電卓を作ろうとするが、特定の部分で詰まっていますね。 「apple」という文字列があるとしましょう。変換するには、最後に「way」を追加すると「appleway」になります。これまでこの部分を終えました。

私が付いているのは「スポーツ」のような文字列です。これを行うには、最後の最初のコレクションの前に子音を置き、「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の元のbash +1を好むと言わなければなりません。とても良いです!

関連情報