我必须验证类似的模式:abc.123456789.123
(示例)我必须检查这些内容:
.
).
)和数字,范围 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的新手,我尝试了上述正则表达式,但未能通过abc.1.
和abc..
。
答案 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)