正規表現では、[[.ch.]]はどういう意味ですか?

正規表現では、[[.ch.]]はどういう意味ですか?

代替タイトル:POSIX準拠の正規表現では、「組み合わせシーケンス」または「組み合わせ要素」とは何ですか?

正確な技術的定義が見つかりました。POSIX仕様セクション9.3.5、リストの項目4に対応しますが、わかりません。

例と説明をオンラインで検索しましたが、何も見つかりませんでした。完全手ぶらで戻ってきますが、決してそうではありません。明るい

私が得た唯一のことは、いくつかのケースでは、正規表現が複数の文字を単一の文字として処理して長さ比較を実行し、「最も長い一致」が何であるかを判断できることです(正規表現は貪欲で可能な限り長い一致を返すため)。

しかし、それはすべてですか?使い方を理解するのに苦労していますが、理解が不完全なようです。 正規表現「マーシャリング」は実際に何を意味しますか?[[.ch.]]POSIX仕様の例はこれとどのような関係がありますか?

ベストアンサー1

照合順序要素は通常、照合順序コンテキスト内で参照されます。

多くの言語では、対照(辞書のように並べ替え)は文字ごとには発生しません。たとえば、チェコ語ではch英語のように と の間をソートせずに全体的にソートしますcgciこれはソート要素です(ここでは文字を引用できません。文字はソート要素のサブセットです)。hとの間に配置されますi

今、あなたはこのように尋ねることができます。これは正規表現とどのような関係がありますか?角かっこ式で照合要素を参照したいのはなぜですか?

まあ、角かっこ式では実際に順序が使用されます。たとえば[c-j]数値cと〜の間にあるj。あなたはどうですか?むしろそこに要素を整理することをお勧めします。[h-i]チェコ語で一致するものch

$ echo cho | LC_ALL=cs_CZ.UTF-8 grep '^[h-i]o'
cho

したがって、角かっこ式に一連の組み合わせ要素をリストできる場合は、その要素を個別にリストすることもできます。[a-cch]とととの間の組み合わせ要素を一致させます。要素を組み合わせるには新しい構文が必要です。accha-cch

$ echo cho | LC_ALL=cs_CZ.UTF-8 grep '^[a-c[.ch.]]o'
cho

aそしてcその間のものch)。

今、世界は完璧ではなく、決して完璧ではないかもしれません。上記の例はGNUシステムで実行されました。別の例は要素の構成eUTF-8の鋭いアクセントと組み合わせることができます(として$'e\u0301'レンダリングされています)。$'\u00e9'é

éとéは同じ特徴1 つは 1 文字で表され、もう 1 つは 2 文字で表されます。

$ echo $'e\u301t\ue9' | grep '^[d-f]t'

これは一部のシステムでは正常に機能しますが、他のシステム(GNUシステムなど)では機能しません。そして$'[[.\ue9.]]'それが唯一のものか、または両方と一致する必要があるかどうかはわかりません$'\ue9'$'\ue9'$'e\u301'

アルファベット以外のスクリプトやロケールの異なるスクリプト、ffi(ffi1文字)などのソート順は言うまでもなく、これらの単純なAPIで処理するのは難しいかもしれません。

おすすめ記事