正则表达式检测语言环境?

Gui*_*shy 6 c# regex

我对正则表达式一无所知但我想我必须使用它来解决我的问题我得到了一些看起来像这样的文件名:

MyResource
MyResource.en-GB
MyResource.en-US
MyResource.fr-FR
MyResource.de-DE
Run Code Online (Sandbox Code Playgroud)

我的想法是测试我的字符串是否以"[letter] [letter] - [letter] [letter]"结尾

我知道这是一个非常的菜鸟,但我只是不知道怎么做,即使我确切地知道我想做什么...... :(

fge*_*fge 9

这将测试您的输入:

\.[a-z]{2}-[A-Z]{2}$
Run Code Online (Sandbox Code Playgroud)

这真的是非常的文字:"匹配点(\.,该点是在正则表达式特殊字符),随后的任意字符恰好两个来自az([a-z]{2}- [...]是一个字符类),其次是一个破折号(-),后面两个从任何字符AZ([A-Z]{2}),随后输入结束($).

http://www.dotnetperls.com/regex-match < - 如何在C#中对输入应用此正则表达式.这意味着代码看起来像(UNTESTED):

// Post edit: this will really return a boolean
if (Regex.Match(input, @"\.[a-z]{2}-[A-Z]{2}$").Success) {
    // there is a match
}
Run Code Online (Sandbox Code Playgroud)

http://regex.info < - 购买并阅读它,它是宇宙中正则表达式的最佳资源

http://regular-expressions.info < - 第二个最好的资源

  • 请注意:**en_150**是欧洲英语的有效语言环境.[link](http://cldr.unicode.org/index/downloads/cldr-22) (2认同)

Pat*_*ali 8

为了满足基本变体:

^[A-Za-z]{2,4}([_-]([A-Za-z]{4}|[0-9]{3}))?([_-]([A-Za-z]{2}|[0-9]{3}))?$
Run Code Online (Sandbox Code Playgroud)

其中包括:

  1. 语言代码:ISO 639 2或3,或4用于将来使用,alpha.
  2. 可选脚本代码:ISO 15924 4 alpha或3位数.
  3. 可选的国家代码:ISO 3166-1 2 alpha或3位数.
  4. 用下划线或短划线分隔.

有效的例子是:

  • EN-US
  • ZH-汉特-TW
  • EN-AU
  • aR_cYrl-AZ.

请注意,某些编程语言的函数可能只接受特定的表单,例如只有下划线和大写的国家/地区代码.PHP的intl函数接受case和separator.PayPal只接受语言或la_CY表格.

管理这些标签的互联网使用的IETF RFC 5646建议使用大写和分离格式az-Cyrl-AZ,如前面三个例子中所使用的那样,尽管它表示处理器应该接受任何案例和分隔符的混合,如前两个例子所示.

但是,它还表明不应自动应用大小写转换,因为它可能会产生无效结果.这意味着,如果请求区域设置字符串,则显示一个显式列表,或者仅在键入每个字符时接受推荐案例的条目.

推荐的基本格式的正则表达式是:

^[a-z]{2,4}(-([A-Z][a-z]{3}|[0-9]{3}))?(-([A-Z]{2}|[0-9]{3}))?$
Run Code Online (Sandbox Code Playgroud)

正则表达式仅涵盖基本格式.有额外的变种,如当地区域.该CLDR包括语言环境en_US_POSIXca_ES_VALENCIA.这一切都取决于所需的粒度.RFC 5646允许此类变体,以及私有扩展和向后兼容形式.

如果使用基于CLDR的函数集(如PHP的intl扩展名),则必须查找区域设置资源包以查看区域设置是否实际存在 - 至少在包含CLDR数据库版本时 - 否则将导致本地化可能会产生不良后果,甚至失败.

后者提出了一个问题:为什么不进行查找呢?好吧,CLDR语言环境资源包需要时间来加载,因为它加载了很多其他内容(700多个条目,50MB),因此正则表达式是一个很好的前端健全性检查,可以过滤掉非法字符,或保留可能的格式未来的补充.