替代ereg中的preg_match_all

时间:2013-11-11 07:57:49

标签: php regex text-extraction

我尝试使用ereg函数从PHP(可能存储在CSV文件中)的字符串中获取具有特定格式(02:AA:13:09:45:DE)的所有数据用PHP。

这就是我的尝试:

$string = '02:AA:13:09:45:DE -90 hRm / -21 450 s RX: 1.0 , 1 . TX: 2.0 , MCS 0, 1 . 13:09:13:10:15:5D -33 hRm / -55 5000 s RX: 66.0 , MCS 0, 333 . TX: 66.0, MCS 0, 333 . 17:09:A3:07:30:DC -55 hRm / -22 hRm 456 s RX: 43.0  MCS 0, 434. TX: 43.0 , MCS 0, 43 .'

$pattern='^[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}';
ereg($pattern, $string, $matches);
print_r($matches);

这只给出了第一个值:02:AA:13:09:45:DE由于我不应该使用preg_match_all (或任何其他preg函数),还有其他方法可以实现此功能(获取所有数据)吗?

1 个答案:

答案 0 :(得分:2)

好吧,preg_matchpreg_match_all是最佳选择,而ereg是dead

所以你的替代品有点脏。

$items = explode(" ", $string);
foreach($items as $item) {
    $chunks = explode(":", $item);
    // check current item. If consist of 6 hex digits separated by :
    if (count($chunks) == 6) {
        $valid = TRUE;
        // all numbers must be hex!
        foreach($chunks as $chunk) {
            if (!ctype_xdigit($chunk)) {
                $valid = FALSE;
                break;
            }
        }
        if ($valid) {
            echo $item;
        }

    }
}