正则表达式捕获数据

时间:2016-11-17 08:37:16

标签: regex

我正在尝试使用正则表达式捕获一组字符串。 字符串具有以下格式

CID _At                   1   2  99   1,198,498,377         414           0       0       0       3,694

我想出的表达是

[A-Za-z][a-z0-9A-Z_-]*\s*[0-6]\s*[0-4]\s\s[\s\d]\d\s*[0-9,]*\s*[0-9,]*\s*[0-9,]*\s*[0-9,]*\s*0\s*[0-9,]*

虽然这个表达式对我有用,并且给出了必要的输出,但我觉得它没有被优化。

有人可以帮助我优化表达吗?

1 个答案:

答案 0 :(得分:1)

<?php
$text = 'CID _At                   1   2  99   1,198,498,377         414           0       0       0       3,694';
preg_match("/^[A-Z]+\s+[A-Za-z_]+\s+[0-9]+\s+[0-9]+\s+[0-9]+\s+[0-9,]+\s+[0-9]+\s+[0-9]+\s+[0-9]+\s+[0-9]+\s+[0-9,]+$/", $text, $m);
print_r($m);
preg_match("/^([A-Z]+)\s+([A-Za-z_]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9,]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9,]+)$/", $text, $m);
print_r($m);
/*
Output:
Array
(
    [0] => CID _At                   1   2  99   1,198,498,377         414           0       0       0       3,694
)
Array
(
    [0] => CID _At                   1   2  99   1,198,498,377         414           0       0       0       3,694
    [1] => CID
    [2] => _At
    [3] => 1
    [4] => 2
    [5] => 99
    [6] => 1,198,498,377
    [7] => 414
    [8] => 0
    [9] => 0
    [10] => 0
    [11] => 3,694
)

*/

删除*,如果需要组内部匹配() 在php中的例子,如果你需要一些长度,请替换&#34; +&#34; by&#34; {1}&#34; (1个字符长度)

如果您需要,最少1和最多3 {1,3}

如果您需要最小1和最大无限{1,}