2013-08-20 178 views
0

我在正則表達式中並不擅長。我創建了一個函數,用於在數組中的第一個匹配詞後找出特定的詞。代碼是查找特定單詞後的單詞

$searchkey1 = array('NUMBER', 'REF', 'TRANSACTION NUMBER'); 
$searchkey2 = array('CURRENT BALANCE RS.', 'NEW BALANCE IS'); 
$smsdata = "TRANSACTION NUMBER NER13082010132400255 TO RECHARGE 198 INR TO 9999999999 IS SUCCESSFUL. YOUR NEW BALANCE IS 8183.79 INR."; 

function get_details($searchkey, $smsdata) 
{ 
    foreach ($searchkey as $key) { 
     $result = preg_match_all("/(?<=(" . $key . "))(\s\w*)/", $smsdata, $networkID); 
     $myanswer = @$networkID[0][0]; 
    } 
    return $myanswer; 
} 

echo get_details($searchkey1, $smsdata); 
echo "<BR>"; 
echo get_details($searchkey2, $smsdata); 

我正在使用此函數來查找其他字也。並且它正在查找除十進制值以外的任何其他單詞。 這裏在我的示例代碼返回值是11192,但我想用十進制得到11192.75

請糾正我的錯誤。

$result=preg_match_all("/(?<=(".$key."))(\s\w*)/",$smsdata,$networkID); 

給出結果NER13082010132400255和8183 //這裏的定義是無視的。

$result=preg_match_all("/(?<=(".$key."))\s*(\d*\.?\d*)/",$smsdata,$networkID); 

給出的結果「空白」和8183.79 //這裏的第一個結果是空白

我希望結果是NER13082010132400255和8183.79

+0

我修改我的問題,因爲它給一些錯誤的結果另一個案例 – newcomer

+0

可能重複[正則表達式:如何第一個字一個表達式匹配後(HTTP://計算器.com/questions/546220/regex-how-to-match-the-first-word-after-an-expression) – hakre

回答

2

我不相信\w涵蓋的時期。使用和\.

$result=preg_match_all("/(?<=(".$key."))(\s[\d\.]+)/",$smsdata,$networkID); 
+0

先生,我修改了我的問題,請幫助我。 – newcomer

+0

你不接受答案,然後再次修改你的問題。加上你非常糟糕的溝通你的需求。我幫不了你。 – DevZer0

1

的OP的正則表達式捕捉龍頭空間太\d的混合物。 @ DevZer0的正則表達式也捕獲尾點。 這僅給出了平衡:

$result=preg_match_all("/(?<=(".$key."))\s*(\d*\.?\d*)/",$smsdata,$networkID); 
+0

awsome謝謝。你能指導我在某個單詞之前找出單詞嗎? – newcomer

+0

/\ w(?= \ s + particular_word)/ – jaeheung

+0

對不起,錯過加.../\ w +(?= \ s + particular_word \ b)/ – jaeheung