java - 正则表达式匹配 ResourceBundle

标签 java regex resourcebundle

我需要一个与 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} 与一个区域设置部分完全匹配。

(_([a-z]{2}(_[A-Z]{0,2})?|[a-z]{0,2}(_[A-Z]{2})?){1} 与两个字符的语言代码和可能为零且最多 2 个字符的国家/地区代码之一完全匹配,或者反之亦然。

(_\\w*)? 匹配一个变体或不匹配任何变体。

知道如何修复和/或改进这个正则表达式吗?

最佳答案

这与所有示例匹配:

^[a-zA-Z\_\.]+[A-Z]{0,2}[a-zA-Z\_\.]*.properties$

关于java - 正则表达式匹配 ResourceBundle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5055249/

相关文章:

java - Android Studio : Hardware backing HAL too slow, 只能写入 720 帧中的 0 帧

html - 匹配样式 =' ' 的正则表达式

regex - 如何在多个subversion存储库中搜索文件内容?

javascript - 如何使用正则表达式匹配任意字母组合?

java - 如何使用 JSTL 标签检查资源包 key 是否不存在?

java - MigLayout 奇怪的对齐顶部行为

java - 如何与 Runtime.getRuntime().exec(command) 程序交互?

javascript - 使用 CryptoJS 在 Javascript 中加密并在 Java 中解密

Java Properties 属性值 - 带有前导空格的消息

symfony - fatal error 异常: Error: Class 'ResourceBundle' not found