テキスト内の母音 - 子音 - 同母音パターンを持つ単語を見つけるためにgrepパラメータを探しています。
例:
オーロ
円
ルオofo
ピアツーピアパールコットンピアツーピア
ありがとうございます。
答え1
コレクションの形成は言語と地域によって異なります。
認識された英語のコレクションの場合(ここでは小文字のバージョンのみが考慮されます):
vowels=aeiou
consonants=bcdfghjklmnpqrstvwxyz
grep "\([$vowels]\)[$consonants]\1"
$vowels
あなたの言語に適応することができます$consonants
。
ただし、Unicodeを使用すると少し複雑になる可能性があります。
たとえば、ラテン語のアルファベットに限定しても、フランス語では夏の言葉と一致します。ただし、Unicodeでは、éは単一の文字(U + 00E9)で書くことも、それに続くé
分解形式で書くこともできます。e
結合する鋭いアクセント( ◌́
U+0301)。
それ以外に、このような文字もありますがfi
、これは2文字を書くもう一つの方法ですfi
。
この問題を解決する1つの方法は、テキストを次に変換することです。標準化された形式e⃞
確認する前に、マルチ文字形式に展開してください。次に、基本文字と発音区別記号または他の結合文字(!=などの完全な文字素クラスタ)のシーケンスを考慮する必要がありますé̂
。
perl -MUnicode::Normalize -C -lne '
print if NFKD($_) =~ /((?=[aeiouy])\X)(?=[bcdfghjklmnpqrstvwxz])\X\1(?!\p{mark})/'
(NKFDは標準化された形式です。互換性分析é
e
、+◌́
および+になることfi
)。f
i
\X
perl
ゲームで拡張文字列クラスタ。(?=[aeiouy])\X
基本文字が小文字のラテン語の集合(soe
または...)のé
文字素クラスタの場合も同様です。これはy
コレクションとして含まれます(ラテンアルファベットを使用する多くの言語ではコレクションと見なされるため)。
したがって、私たちは母音クラスター、子音クラスター、およびで取り込まれた最初のクラスターと一致します\1
。ただし、次の文字がまだそのクラスタの一部ではないことを確認する必要があります。それ以外の場合は、同様のものと一致しますeté
。したがって、次の文字に対応する属性がないことを確認するには、否定予測演算子を使用しますmark
。
したがって、次の入力の場合:
fini
été
tacheté
次を返します。
fini
été