Java正则表达式-首先需要是字母X(不区分大小写),其余数字

Java正则表达式-首先需要是字母X(不区分大小写),其余数字,java,regex,Java,Regex,我需要匹配以查看字符串的格式是否为X[d]。。。。它的开头必须有字母X(大小写密集型),后面至少有一位数字。我尝试了以下正则表达式,但它与任何内容都不匹配: ^(?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 aft

我需要匹配以查看字符串的格式是否为X[d]。。。。它的开头必须有字母X(大小写密集型),后面至少有一位数字。我尝试了以下正则表达式,但它与任何内容都不匹配:

 ^(?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
在Java中,您可以使用

s.matches("(?i)x[0-9]+")
它将匹配一个以
x
x
开头,然后有一个或多个数字的字符串

您不应该量化一个前瞻性的零宽度断言,因为它意味着它将匹配一个空位置,而重复匹配它意味着您仍然在那里,并且regex索引不是高级的

然而,Java正则表达式只是忽略了一个量化的前瞻。您当前的正则表达式,
^(?i)[x](?=.[0-9])*$
匹配
x
,但不匹配
x5
,因为只有一个部分需要匹配,
[x]
。看

即使删除了
*
量词,
^(?i)[x](?=.[0-9])$
也不匹配任何字符串,因为
$
是字符串末尾,必须紧跟在
x
之后,而
(?=.[0-9])
正向前瞻需要在任何0+字符之后加上一个数字,而不是换行字符。

使用以下方法

^(?i)x\d+$
这转换为不区分大小写的x后跟一个或多个数字0-9。没有必要用括号括住x,因为它不是一个集合。只有一个角色

或者,您可以创建一个由大写和小写x组成的集合

^[xX]\d+$
它并不匹配任何事实上的错误,见下文。它与
x
x
匹配。