2016-11-17 141 views
-1

我想捕獲一組使用正則表達式的字符串。 字符串是以下格式的正則表達式來捕獲數據

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,]* 

雖然這種表達對我的作品,並提供必要的輸出,我覺得這不是最優化。

有人可以幫我優化表達嗎?

+0

你可以用正則表達式在這裏玩:https://regex101.com/ r/86DiBO/1它還會告訴你需要多少步驟。 –

+0

Hi @jace我正在嘗試從文件中提取數據。該文件包含與我提到的相似的多行,具有不同的值和名稱,以及其他一些我不需要的數據。 –

回答

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 例如內部匹配,如果需要一些長度,將 「+」 通過 「{1}」(1個焦化長度)

,如果你需要,最小1和最大3 {1,3}

,如果您需要最低1和最大無限{1,}