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

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

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

我想要的结果是 NER13082010132400255 和 8183.79

4

2 回答 2

2

我不相信\w涵盖期间。混合使用\d\.

$result=preg_match_all("/(?<=(".$key."))(\s[\d\.]+)/",$smsdata,$networkID);
于 2013-08-20T03:23:02.147 回答
1

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

$result=preg_match_all("/(?<=(".$key."))\s*(\d*\.?\d*)/",$smsdata,$networkID);
于 2013-08-20T03:39:59.867 回答