在特定单词后查找单词


Find a Word after a particular word

我对正则表达式不太熟悉。我创建了一个函数,在数组中第一个匹配单词之后找出一个特定单词。代码是

$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);

给出结果NER130882010132400255和8183//此处忽略demical。

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

给出结果"空白"和8183.79//此处第一个结果为空白

我的愿望结果是NER130821013240255和8183.79

我不认为'w涵盖了这个时期。使用'd'. 的混合物

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

OP的regexp也捕获了前导空格。@DevZer0的regexp也捕获了尾随点。这只提供了余额:

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