我在正则表达式方面不是那么专业。我创建了一个函数,用于在数组中的第一个匹配字之后找出特定的单词。代码是
$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
答案 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);