Java正则表达式最大长度与一个连字符

标签 java regex

我需要根据给定条件验证输入,

- 总长度必须为 20 个字符 -前五个位置必须是字母 -剩余应该是数字,但必须存在一个连字符(-),该连字符只能出现在数字之间。 我有像这样的正则表达式

([a-zA-Z]){5}[0-9]+([-]){15} 

但它也允许在末尾使用连字符,甚至接受不带连字符的情况。

最佳答案

你可以使用

^[a-zA-Z]{5}(?=[0-9-]{15}$)[0-9]+-[0-9]+$

请参阅 regex demo

详细信息:

  • ^ - 匹配字符串的开头
  • [a-zA-Z]{5} - 匹配 5 个字母
  • (?=[0-9-]{15}$) - 要求字符串的其余部分长度应为 15 个字符
  • [0-9]+-[0-9]+ - 1+ 数字后跟连字符,后跟 1+ 数字
  • $ - 字符串结尾(您可以替换为 \z 以排除字符串末尾最后一个换行符之前的匹配)

如果您使用.matches(),您可以省略外部 anchor 。

参见 Java test:

String pat = "[a-zA-Z]{5}(?=[0-9-]{15}$)[0-9]+-[0-9]+"; 
System.out.println("abcde123456-89012345".matches(pat));   // true
System.out.println("abcde-12345689012345".matches(pat));   // false
System.out.println("abcde12345689012345-".matches(pat));   // false
System.out.println("abcde12345689012345-12".matches(pat)); // false

关于Java正则表达式最大长度与一个连字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36839935/

相关文章:

xml - 删除 Vim 中的重复行?

java - 正则表达式在每个字符串html中添加事件onclick

java - 计算每个组合中的子字符串出现次数

arrays - 将 `ByVal` 参数传递给 Regex 函数会导致代码非常慢,尽管使用 Array

java - 如何从我生成的数据中获取标准差

python - 正则表达式匹配小于 500 英尺的字符串中的小数位

java - 获取在工具提示上格式化的值

java - 如何使用独立的 Neo4j 服务器配置 spring-data-neo4j?

java - 通过集成 Spring SAML(作为 SP)和 SimpleSAML(作为 IdP)转发错误

java - 正确的程序可能会被错误地同步吗?