已关闭,此问题需要更focused。它目前不接受回答。
**想改善这个问题吗?**更新问题,使其只关注editing this post的一个问题。
4年前关闭。
Improve this question
我对正则表达式一无所知,但我想我必须用它来解决我的问题,我得到了一些文件名,看起来像:
MyResource
MyResource.en-GB
MyResource.en-US
MyResource.fr-FR
MyResource.de-DE
这个想法是测试我的字符串是否以“[letter][letter]-[letter][letter]”结尾
我知道这是一个非常noob,但我只是不知道如何做到这一点,即使我知道我到底想做什么...:(
9条答案
按热度按时间62lalag41#
为了满足基本变量:
其中包括:
1.语言代码:ISO 639 2或3,或4以备将来使用,alpha。
1.可选脚本代码:ISO 15924 4 α。
1.可选国家代码:ISO 3166-1 2字母或3位数字。
1.用下划线或破折号分隔。
有效示例如下:
对于OP的特定问题,这需要以
/^MyResource[.]
为前缀,以$/
为后缀,以确保整个文件名是以区域设置结尾的有效资源文件。请注意,某些编程语言的函数可能只接受特定的形式,如下划线和国家代码。PHP的
intl
函数接受大小写和分隔符。PayPal只接受语言或la_CY
表格,其中la
是语言,CY
是国家/地区。可以使用PHPlocale_canonicalize
函数转换为这种格式。IETF RFC 5646管理这些标签的互联网使用,推荐了一种大写和分隔格式,如
az-Cyrl-AZ
,如上面的前三个例子中所使用的,尽管它说处理器应该接受任何大小写和分隔符的混合,如最后两个例子。当显示区域设置时,使用-
作为分隔符允许更细粒度的换行,否则可能会像使用非换行_
时那样产生明显的空行,特别是在表格单元格中。推荐的基本格式的正则表达式是:
regexp只包含基本格式。临时演员也有不同的版本,比如当地的。RFC 5646允许这样的变体,沿着有私有扩展和向后兼容形式。这完全取决于所需的粒度。PHP的
intl
函数和其他程序使用的CLDR Unicode数据库可能会在不同版本中包含这些变体,尽管它们也可能在以后消失。如果使用基于CLDR的函数集,如PHP的
intl
扩展,则可以使用以下函数检查intl
数据库中是否存在区域设置:加载和搜索数据大约需要半毫秒的时间,因此不会对性能造成太大影响。
当然,它只会在随所用PHP版本提供的CLDR版本的数据库中找到这些数据,但会随每个后续PHP版本更新。
请注意,有些区域设置不是针对国家,而是地区,这些通常是数字,如
001
代表“世界”,150
代表“欧洲”,419
代表“拉丁美洲”。所以现在有en-001
,en-150
,ar-001
和es-419
,它们可以用于泛型语言。例如,en-001
被设计为解耦对en-us
的依赖,特别是因为它的日期格式和拼写与其他100个地区性的en
变体完全不同。en-150
区域设置与en-001
相同,除了编号分隔符和其他特定于欧洲的格式。一般来说,regexp是一种很好的前端健全性检查,可以过滤掉非法字符,特别是保留格式以备将来添加。它还有助于防止恶意字符组合被发送到查找工具,特别是在使用基于文本的查找命令机制(如SQL或XPath)的情况下。
3htmauhk2#
这将测试您的输入:
这真的很字面:“匹配一个点(
\.
,点号是正则表达式中的特殊字符),后跟从a
到z
的任意两个字符([a-z]{2}
--[...]
是一个字符类),后跟一个破折号(-
),后跟两个从A
到Z
的任意字符([A-Z]{2}
),后跟输入结束($
)。http://www.dotnetperls.com/regex-match <--如何在C#中对输入应用此正则表达式。这意味着代码看起来像(未经测试):
http://regex.info <--购买并阅读它,它是宇宙中最好的正则表达式资源
http://regular-expressions.info <--第二好的资源
uyto3xhc3#
与其使用Regex,我建议您使用.Net中内置的对区域性的支持,即System.Globalization.CultureInfo类;构造函数识别有效的区域性字符串,并为您提供可用于区域性特定操作的对象:
2o7dmzc54#
你可以试试这样的东西:
[a-z]{2}-[a-z]{2}
mctunoxg5#
你几乎在问题中回答了。试试看:
同样,这里有一个有用的两个字母的国家代码列表。
http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2
我知道这不是真正的正则表达式,但你似乎并不确定绝对需要使用它。
g9icjywg6#
5tmbdcev7#
这可能不是这个问题的答案,但人们可能会路过并寻找这个答案。
要匹配像
en_GB
这样的语言环境,可以使用以下表达式:/^[a-z]{2}_[A-Z]{2}$/
我会在这里解释一下:
^[a-z]
意味着以小写字母开头,{2}
意味着您希望正好有两个这样的字母然后是
_
[A-Z]{2}$
表示以大写字母结尾,并且恰好匹配其中的两个,$
表示这些字母必须位于字符串的末尾。nbysray58#
对the great answer by Patanjali的扩展,但也包括命名组和对RFC 4647中定义的私有使用的支持。举例来说:
de-DE-x-goethe
或zh-Hant-CN-x-private1-private2
。avkwfej49#
我使用了这个正则表达式,它适用于只有可选'_'的locale。
嗯,
de,
en_us,
简体中文
所以Regex在语言环境只有固定的两个字符(只有)或者它有两个字符(只有)+ _ +两个字符(可以是)的情况下工作。