用于验证Java模式的正则表达式

时间:2017-07-05 17:51:25

标签: java regex

我必须验证类似的模式:abc.123456789.123(示例)我必须检查这些内容:

  1. 首先应为固定长度不区分大小写)的字母
  2. 后跟.
  3. 范围 0-9 长度
  4. 数字应为 9
  5. 后跟.)和数字,范围 0-9 长度 3 可选
  6. 有效示例:

     abc.1  
     Abc.123456789  
     aBc.123.123  
     ABC.123456789.12 
    

    无效的例子:

     abc.1.  
     abc..1.123  
     .123  
     abc.123w45678.123  
     abc.  
    

    我尝试了什么:

    ^[a-zA-Z]{3}\\.\\d{0,9}\\.\\d{0,3}|[a-zA-Z]{3}\\.\\d{0,9}$   
    

    由于我是Regex的新手,我尝试了上述正则表达式,但未能通过abc.1.abc..

3 个答案:

答案 0 :(得分:0)

您想要的正则表达式是^[a-zA-Z]{3}\.[0-9]{1,9}(\.[0-9]{1,3})?$。它符合您的测试用例,而不是您给出的规则,因为我发现您的规则有点模糊。

我使用regexr制作了这个正则表达式,它是构建和测试正则表达式的一个很好的免费工具。

编辑: 由于您打算将此正则表达式用于Java,因此这里是相同的正则表达式,带有转义反斜杠。 ^[a-zA-Z]{3}\\.[0-9]{1,9}(\\.[0-9]{1,3})?$

答案 1 :(得分:0)

  

i)前三个应该是只有固定长度的字母(不区分大小写)

不区分大小写(拉丁语,非重音):[A-Za-z]

您可以通过重复两次该片段或使用枚举量词来指定恰好三次出现:{3}

  

ii)后跟点(。)

点是正则表达式元字符,因此需要进行转义:\.。当放入String文字时,反斜杠必须加倍才能转义 it

  

iii)0-9范围内的数字,长度应为9

从您的示例中,我收集的是最大长度9.一位十进制数字为[0-9]。其中一到九个是[0-9]{1,9}

  

iv)后跟点(。)(这是可选的)

     

v)0-9范围内的数字,长度应为3(这是可选的)

你的模式的尾部是可选的,但是根据你的例子,(iv)和(v)不是单独的选项,而是一个联合选项 - 两者都存在或两者都不存在。此外,您的示例表明您的意思是最大三位数。您可以使用已经讨论过的模式组件来构成此部件的子模式;要使其成为可选项,请使用(?:)将这些部分组合在一起,并使用?量词使该组成为可选项。

将所有这些放在一起,(a)模式将是

[A-Za-z]{3}\.[0-9]{1,9}(?:\.[0-9]{1,3})?

或作为字符串,

Pattern p = Pattern.compile("[A-Za-z]{3}\\.[0-9]{1,9}(?:\\.[0-9]{1,3})?");

根据您的要求,您可能也可能不想将模式锚定到字符串的开头(通过以^字符开头)和/或字符串/行的末尾(通过以$字符结束它。如果你没有将它锚定到字符串的末尾,那么你可能想要附加一个断言,即下一个字符(如果有的话)不是另一个数字:(?![0-9])

答案 2 :(得分:0)

简单地说:

^[a-zA-Z]{3}\.\d{1,9}(?:\.\d{1,3})?$

enter image description here

See here and click on Java