java - 使用正则表达式验证输入字符串 "RX-EZ12345678912345B"

标签 java regex regex-greedy

我需要验证应采用以下格式的输入字符串:

<2_upper_case_letters><"-"><2_upper_case_letters><14-digit number><1_uppercase_letter>

Ex: RX-EZ12345678912345B

我试过类似这样的 ^[IN]-?[A-Z]{0,2}?\\d{0,14}[A-Z]{0,1} 但它没有给出预期的结果。

我们将不胜感激。

谢谢

最佳答案

你最大的问题是开头的[IN],它只匹配一个字母,而且只有IN。如果您想匹配两个 any 字母,请使用 [A-Z]{2}

一旦你解决了这个问题,你的正则表达式将仍然只匹配 RX-E。这是因为 [A-Z]{0,2}? 开始尝试不消耗任何东西,多亏了不情愿的量词 {0,2}?。然后 \d{0,14} 匹配零位,[A-Z]{0,1} 贪婪地消耗 E

如果要精确匹配 2 个字母和 14 个数字,请使用 [A-Z]{2}\d{14}。由于您要验证字符串,因此应该使用结束 anchor $ 结束正则表达式。结果:

^[A-Z]{2}-[A-Z]{2}\d{14}[A-Z]$

...或者,作为 Java 字符串文字:

"^[A-Z]{2}-[A-Z]{2}\\d{14}[A-Z]$"

正如@nhahtdh 所观察到的,如果您使用 Java 的 matches() 方法来应用正则表达式,则实际上不必使用 anchor ,但我还是建议您这样做。它可以更好地传达您的意图,并使正则表达式具有可移植性,以防您必须在不同的风格/上下文中使用它。

编辑:如果前两个字符应该正好是IN,那就是

^IN-[A-Z]{2}\d{14}[A-Z]$

关于java - 使用正则表达式验证输入字符串 "RX-EZ12345678912345B",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11150146/

相关文章:

java - Gui 不绘制面板

java - JCOMBOBOX 内的重复值

c++ - regex_match 作为谓词

java - 使用正则表达式读取聊天消息

javascript - 查找 pec+ 的正则表达式模式

java - 如何映射 JavaFX 可观察值的值?

java - Servlet在doPost方法中获取GET和POST的参数

JavaScript REGEX 全部匹配并替换

java - 用于捕获特定数字的正则表达式

regex - grep的贪婪行为