正则表达式为flex中的实数忽略前导零

时间:2016-04-15 21:19:43

标签: regex flex-lexer

我有以下几套:

public static function airingTimeToUserTimezone($airing_day, $airing_hour, $airing_minutes)
{
    $AirDateTime = new DateTime("2016-02-$airing_day $airing_hour:$airing_minutes:00");
    $AirDateTime->setTimezone(self::$user->DateTimeZone);

    $toret = array();
    list (
        $toret['day'],
        $toret['dayname'],
        $toret['hour'],
        $toret['minutes'],
        $toret['timestring']
    ) = explode("/", $AirDateTime->format("N/l/G/i/g:i A"));

    return $toret;
}

我想让我的词法分子接受如下实际数字: 0.002或0.004e-10或.01

问题是,我希望它忽略前导零,但保留数字的其余部分,例如:

当我给000.0002时我想保留0.0002当我给0.2e-0100我想要保持0.2e-100

所以我在想像atof函数,但我不知道该怎么做。

有什么想法吗?

提前致谢

1 个答案:

答案 0 :(得分:1)

lex将返回您的模式匹配为一个字符串的完整标记。您无法更改 。以相当复杂为代价,您可以使用开始条件来匹配前导零(可能是唯一的数字),并收集碎片的标记,例如,

0.2e-0100

作为

0.2e-
0
100

并将第一个/最后一个令牌粘合在一起,但你会发现很多更容易开发自己的字符串函数,过滤掉不需要的前导零。