我有一个查询,比如需要为字符串生成一个正则表达式,如"12A15“或"12a15".here,它有3个组件,1-9最大长度为21-9 lmax,长度为2。
我编写了Regex来验证字符串,但它仍然无法验证给定的数字:
(^[1-9]{1,2}[{d,D}][{4,6,8,10,12,20}]{1,2})+(\s?(\+|\-)\s?)([1-9]{1,2}([{d,D}][{4,6,8,10,12,20}]{1,2}))$在这里,在正则表达式中,我正在验证一个字符串12D22 +3d20。这说明它是匹配的,但不应该这样做,因为22不在列表中。在有效的5D20+5d12字符串中,12和20可以是4、6、8、12、20列表中的任意数字。
发布于 2019-07-11 11:08:02
你可以用
^[0-9]{1,2}[dD]([468]|1[02]|20)\s?[+-]\s?[0-9]{1,2}[dD]([468]|1[02]|20)$

详细信息
^ -字符串的开始(如果在.matches()中使用则省略)[0-9]{1,2} -1或2位数[dD] - d或D([468]|1[02]|20) - 4,6,8,10,12或20\s? -一个可选的空格[+-] - +或-\s? -一个可选的空格[0-9]{1,2}[dD]([468]|1[02]|20) -见上文$ -字符串的结尾(如果在.matches()中使用则省略)。在Java中:
String block = "[0-9]{1,2}[dD](?:[468]|1[02]|20)";
String regex = block + "\\s?[+-]\\s?" + block;
bool matched = your_string.matches(regex);https://stackoverflow.com/questions/56914911
复制相似问题