我需要匹配以查看字符串是否格式为X [d] ....它必须在开头处具有字母X(大小写密集)并且在之后至少1位数字。我尝试了以下正则表达式,但它没有matchanything:
^(?i)[x](?=.*[0-9])*$
// ^(?i)[x] - first character needs to be x (case intensive)
// (?=.*[0-9]) - should have at least one digit after and must be all digits after
答案 0 :(得分:2)
使用以下内容。
^(?i)x\d+$
这转换为不区分大小写的x后跟一个或多个数字0-9。 x周围不需要括号,因为它不是一组。它只有一个角色。
或者,您可以创建一个由大写和小写x组成的集合。
^[xX]\d+$
答案 1 :(得分:1)
在Java中,您可以使用
s.matches("(?i)x[0-9]+")
它会匹配以x
或X
开头,然后有1个或更多数字的字符串。
你不应该量化前瞻,零宽度断言,因为它意味着它将匹配一个空位置并重复匹配意味着你仍然在那里并且正则表达式索引没有提前。
然而, Java正则表达式只是忽略了量化的前瞻。您当前的正则表达式^(?i)[x](?=.*[0-9])*$
与x
匹配,但不匹配x5
,因为只有一个要匹配的部分[x]
。请参阅Java demo。
即使您删除了*
量词,^(?i)[x](?=.*[0-9])$
与$
之后的任何字符串都不匹配,字符串结尾也需要x
(?=.*[0-9])
"[[A,B],[C,D]]"
正向前瞻需要除了换行符之外的任何0+字符之后的数字。