我需要一个正则表达式来匹配 T001、T1、T012、T150 ---- T999 等字符串。
我是这样设计的 : [tT][0-9]?[0-9]?[0-9]
,但显然它也会匹配 T0、T00 和 T000,这是我不想要的。
如果前一个或两个为零,如何强制最后一个字符为 1?
我不会为此使用正则表达式。
<?php
function tValue($str) {
if (intval(substr($str, 1)) !== 0) {
// T value is greater than 0
return $str;
} else {
// convert T<any number of 0> to T<any number-1 of 0>1
return $str[ (strlen($str) - 1) ] = '1';
}
}
// output: T150
echo tValue('T150'), PHP_EOL;
// output: T00001
echo tValue('T00000'), PHP_EOL;
// output: T1
echo tValue('T0'), PHP_EOL;
// output: T555
echo tValue('T555'), PHP_EOL;
使用负前瞻很容易:^[tT](?!0{1,3}$)[0-9]{1,3}$
解释
^ # match begin of string
[tT] # match t or T
(?! # negative lookahead, check if there is no ...
0{1,3} # match 0, 00 or 000
$ # match end of string
) # end of lookahead
[0-9]{1,3} # match a digit one or three times
$ # match end of string