繁体   English   中英

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

[英]Regex for validating a pattern in Java

我必须验证类似abc.123456789.123的模式(示例),在其中必须检查以下内容:

  1. 三个字母只能是固定长度的字母( 不区分大小写
  2. 后跟.
  3. 0-9范围内的数字长度应为9
  4. 后跟. )和0-9范围内的数字长度应为3可选

有效示例:

 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的新手,所以我尝试了上述Regex,但是它无法通过abc.1. abc..

您想要的正则表达式是^[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})?$

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

不区分大小写(拉丁字母,不带重音)的字母: [A-Za-z]

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

ii)后跟点(。)

点是正则表达式的元字符,因此需要转义: \\. 当放入一个字符串中,反斜线必须加倍逃脱

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

从你的例子,我猜你的意思是最大长度9.一个十进制数是[0-9] 其中1到9之间是[0-9]{1,9}

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

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])

简单的说:

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

在此处输入图片说明

在这里看到并单击Java

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM