我需要一个能匹配T001,T1,T012,T150 ---- T999等字符串的正则表达式。
我这样做:[tT][0-9]?[0-9]?[0-9]
,但显然它也会匹配我不想要的T0,T00和T000。
如果前一个或两个为零,如何强制最后一个字符为1?
答案 0 :(得分:3)
我不会使用正则表达式。
<?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;
答案 1 :(得分:3)
使用否定前瞻非常简单:^[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