我有这个正则表达式
^[0-9]+[a-zA-Z0-9]*但是我需要一个总是有一个数字的星星,然后它可以是另一个数字或一个字母,但它不能是数字字母。这封信永远是最后一封。就像这个例子
102A OK
1A OK
2 OK
110 OK
10A1 WRONG
BV WRONG这封信不能介于两个数字之间。
发布于 2020-05-04 17:50:19
你可以用消极的眼光看。
^(?!\d+[a-z]\d)\d.*布格-漠不关心的旗帜。
此正则表达式的匹配表示该字符串不包含按该顺序由一个数字、一个字母、一个数字组成的3个字符子字符串。如果匹配成功时要匹配整个字符串,请将.*添加到正则表达式的末尾。
regex引擎执行以下操作。
^ match beginning of line
(?! begin negative lookahead
\d+[a-z]\d match digits-letter-digit
) end negative lookahead
\d match a digit请注意,结尾处的\d必须遵循负前瞻。如果正则表达式为^\d(?!.\d+[a-z]\d),字符串为1A1,则负查找将无法在A1中找到数字字母数字,而整体匹配将成功(不正确)。
因为负查找被固定在行的开头,并且不消耗字符,如果它失败(匹配成功),那么在regex末尾的\d搜索将从行的开头开始。
发布于 2020-05-04 16:48:18
您可以匹配一个char 1-9,后面是可选数字0-9和可选字符and。
如果使用[a-zA-Z0-9],字符类将按任何顺序匹配列出的任何字符。
如果将字符和数字分开,则字母不能出现在数字之前,而且由于*量词匹配0或更多次,您也可以匹配单个数字。
^[1-9][0-9]*[a-zA-Z]*$https://stackoverflow.com/questions/61597119
复制相似问题