1

我需要一个正则表达式来匹配 T001、T1、T012、T150 ---- T999 等字符串。

我是这样设计的 : [tT][0-9]?[0-9]?[0-9],但显然它也会匹配 T0、T00 和 T000,这是我不想要的。

如果前一个或两个为零,如何强制最后一个字符为 1?

4

2 回答 2

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;

键盘:http ://codepad.org/hqZpo8K9

于 2013-08-14T09:07:21.803 回答
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

在线演示

于 2013-08-14T10:02:23.647 回答