2010-11-19 55 views
0

拉我的頭髮在這一個:正則表達式捕獲文本,非常有條件

我試圖捕捉到這些詞之間的文字,總是,我得到不同的結果。

當前代碼:

preg_match_all("/ID:([0-9A-Za-z]+)/",$data,$ids); 

if (count($ids[0]) > 1) { 
$data = str_replace($ids[0][1],"",$data); 
} 

preg_match("/ORIG:(.*)ID:.*/",$data,$matches); 

$name = $matches[1]; 

if (FALSE !== $heh = strpos($name,"SND BK:")) { 
$name = substr($name,0,$heh); 
} 

樣本數據:

ORIG:FIRSTNAME LASTNAME ID:123123123 SND BK:TIB BANK BANK BANK DET:MEMO 
ORIG:FIRSTNAME LASTNAME ID:123123123 SND BK:TIB BANK BANK BANK ID:123123123 DET:MEMO 
ORIG:FIRSTNAME LASTNAME ID:123123123 DET:MEMO 

我需要ORIG,並DET之間完全捕獲數據。無論何時我在該字段中有兩個ID,我一直堅持使用RegEx,最終獲得其中一個ID。有時候甚至沒有捕獲到ORIG

任何幫助表示讚賞。謝謝。

回答

0

也許我真的不明白你在這裏嘗試了什麼,但如果你使用以下你將最終擁有orig和det之間的一切。

(ORIG:)(*)(DET)

實施例:

preg_match_all('/(ORIG:)(.*)(DET)/', 
       'ORIG:FIRSTNAME LASTNAME ID:123123123 SND BK:TIB BANK BANK BANK DET:MEMO', 
       $result); 

var_dump($result); 

array(4) { 
    [0]=> 
    array(1) { 
    [0]=> 
    string(66) "ORIG:FIRSTNAME LASTNAME ID:123123123 SND BK:TIB BANK BANK BANK DET" 
    } 
    [1]=> 
    array(1) { 
    [0]=> 
    string(5) "ORIG:" 
    } 
    [2]=> 
    array(1) { 
    [0]=> 
    string(58) "FIRSTNAME LASTNAME ID:123123123 SND BK:TIB BANK BANK BANK " 
    } 
    [3]=> 
    array(1) { 
    [0]=> 
    string(3) "DET" 
    } 
} 
0

可能我建議增加的錨定,並使用多如果這些數據是每個在同一行:

<?php 

$subject = <<<SUBJ 
ORIG:FIRSTNAME FIRST LASTNAME ID:123123123 SND BK:TIB BANK BANK BANK DET:MEMO 
ORIG:FIRSTNAME SECOND LASTNAME ID:123123123 SND BK:TIB BANK BANK BANK ID:123123123 DET:MEMO 
ORIG:FIRSTNAME THIRD LASTNAME ID:123123123 DET:MEMO 
SUBJ; 

$pattern = ' /^ORIG:(.*)DET:/m'; 

preg_match_all($pattern, $subject, $matches); 

print_r($matches); 

?> 

返回:

Array 
(
    [0] => Array 
     (
      [0] => ORIG:FIRSTNAME FIRST LASTNAME ID:123123123 SND BK:TIB BANK BANK BANK DET: 
      [1] => ORIG:FIRSTNAME SECOND LASTNAME ID:123123123 SND BK:TIB BANK BANK BANK ID:123123123 DET: 
      [2] => ORIG:FIRSTNAME THIRD LASTNAME ID:123123123 DET: 
     ) 

    [1] => Array 
     (
      [0] => FIRSTNAME FIRST LASTNAME ID:123123123 SND BK:TIB BANK BANK BANK 
      [1] => FIRSTNAME SECOND LASTNAME ID:123123123 SND BK:TIB BANK BANK BANK ID:123123123 
      [2] => FIRSTNAME THIRD LASTNAME ID:123123123 
     ) 

)