Java正则表达式-首先需要是字母X(不区分大小写),其余数字
我需要匹配以查看字符串的格式是否为X[d]。。。。它的开头必须有字母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
^(?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
匹配。