在特定单词后找到单词

时间:2013-08-20 03:17:52

标签: php regex

我在正则表达式方面不是那么专业。我创建了一个函数,用于在数组中的第一个匹配字之后找出特定的单词。代码是

$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 //这里的demical是忽略的。

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

给出结果“空白”和8183.79 //这里第一个结果是空白

我的愿望结果是NER13082010132400255和8183.79

2 个答案:

答案 0 :(得分:2)

我不相信\w涵盖了一段时间。使用\d\.

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

答案 1 :(得分:1)

OP的正则表达式也捕获了领先的空间。 @ DevZer0的正则表达式也捕获了尾随点。 这只给出了余额:

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