2011-04-13 140 views
2

我正在尝试构建正则表达式。 缩写如下:正则表达式BMHT中的序列

B - Billion 
M - Million 
T - Thousand 
H - Hundred 

现在,如果我说3M2T这意味着3 million 2 thousand 但我不能说3T2M或者我不能说3M2222T BMTH应该是在一个序列和应遵循的标准规则是创建一个数字。 我去了这个 ([0-9]+[B]){1}+([0-9]+[M])?+([0-9]+[T])?+([0-9]+[H])?但这里B是强制性的。

请帮忙。

回答

2

试试这个:

^(?:\d+B)?(?:\d{1,3}M)?(?:\d{1,3}T)?(?:\dH)?$ 

你可以在这里进行测试regexr.com?2thld

(?:)非捕获组,否则捕获的部分被存储在一个变量

\d等于[0-9]

?一群人或一个人物后的IT可选

+指一个或多个

{1,3}最多三个事件不需要

[M]说,至少有一次,当只有1个字符那么只有M足够

+0

非常快速的答案感谢。我用它,它的工作。我想获得一些准则,以更详细地学习正则表达式。 – prasanna 2011-04-15 02:19:57

+0

@prasanna一个很好的信息来源是[www.regular-expressions.info](http://www.regular-expressions.info/tutorial.html)。它涵盖了很多不同的正则表达式风格。我敢说,基本的正则表达式无处不在(几乎)是相同的,但是当你深入细节时,你必须意识到真正的差异。对于Perl,这里有[perlretut](http://perldoc.perl.org/perlretut.html)和[perlrequick](http://perldoc.perl.org/perlrequick.html)。我相信你的编程语言也有很好的教程。还有几个在线工具可以测试,就像我的回答 – stema 2011-04-15 06:00:59

2

([0-9]{1,3}B)?([0-9]{1,3}M)?([0-9]{1,3}T)?([0-9]H)?赞赏每个B/M/T最多3位数字或H(依次),每个组是可选的。添加适合您需求的限制... 请注意,[0-9]不一定等于\d,它取决于区域设置和内容。

+0

这也适用于空字符串(可能或不可取)。 – 2011-04-13 13:09:17

+0

如果我将区域设置更改为其他内容,我如何测试以下内容不起作用? – prasanna 2011-04-15 02:28:50