ResourceBundle
の形式に従う、のファイル名と一致する正規表現が必要ですname_lo_CA_le.properties
。ファイル名にロケール部分があるバンドルにのみ一致する必要があり、名前部分にはアンダースコアを含めないでください。
何時間もの実験の後、私は次のことを思いついた。
^[a-zA-Z]+(_([a-z]{2}(_[A-Z]{0,2})?|[a-z]{0,2}(_[A-Z]{2})?){1}(_\\w*)?){1}\\.properties$
すべての場合に機能するとは限りません。
"bundle.properties".match(...); // false - correct
"bundle_.properties".match(...); // false - correct
"bundle_en.properties".match(...); // true - correct
"bundle__US.properties".match(...); // true - correct
"bundle_en_US.properties".match(...); // true - correct
"bundle_en__Windows.properties".match(...); // false!
"bundle__US_Windows.properties".match(...); // true - correct
"bundle_en_US_Windows.properties".match(...); // true - correct
ここからどうすればいいのか全くわかりません。括弧で囲まれた部分の背後にある私の理由は次のとおりです。
(...){1}
ロケール部分の1つに正確に一致します。
(_([a-z]{2}(_[A-Z]{0,2})?|[a-z]{0,2}(_[A-Z]{2})?){1}
2文字の言語コードとおそらくゼロで最大2文字の国コードのいずれかまたはその逆のいずれかに正確に一致します。
(_\\w*)?
1つのバリアントに一致するか、バリアントに一致しません。
この正規表現を修正および/または改善する方法はありますか?