У меня есть строка с целым числом и значением с плавающей запятой. Теперь я хочу извлечь значение, сопоставив пару слов.
Моя строка выглядит следующим образом. Каждая строка имеет текст баланс. Теперь я хочу получить сумму баланса с помощью регулярного выражения PHP.
$str_demo_one = "210:Recharge request of TK 200 for mobile no. 1789000000, transaction ID BD07232231230125 is successful. Your account balance is TK 13769.98.";
$str_demo_two = "563:Recharge 150 Tk to 1880000000 is successful. Transaction number is R190723.2158.6600eb.Your new balance is tk 3852.55 TAKA. Thank You.";
$str_demo_three = "Recharge Request of TK 300 for mobile no 1942300468, transaction ID R190723.2152.2201e1 is successful. your account balance is TK 5434.72.";
$str_demo_four = "Recharge 650 Tk to 16300000 is successful. Transaction number is R190723.1106.710166.Your new balance is 5921.18 TAKA. Thank You.";
$str_demo_five = "Transaction ID is 0718140110124179. 1531141036 has been recharged successfully with 89 Taka. Your new balance is 2529 Taka.";
Я пробовал с текущим кодом
preg_match_all('/(balance is)(\D*)(\d+)/i',$str,$matches);
он возвращает только целочисленное значение, не возвращая значение с плавающей запятой.
preg_match_all('/(баланс)(\D*)(\d+)/i',$str,$matches);
Пожалуйста, отредактируйте вопрос, чтобы включить соответствующие детали, а не публиковать их в виде комментариев.






Используйте следующее регулярное выражение;
balance is (?:t(?:k|aka))?\s*(\d+(?:\.\d+)?) /ig
Это будет работать, если единицей измерения является «tk» или «taka».
Обратите внимание на использование флага /i для совпадения без учета регистра.
В вашем шаблоне вы не принимаете во внимание десятичную часть. Вы можете обновить свой шаблон на (balance is)(\D*)(\d+(?:\.\d+)?)
Если вам нужно только совпадение, вы можете использовать \K, чтобы забыть, что было сопоставлено, опустить группы захвата и сделать десятичную часть необязательной.
\bbalance is \D*\K\d+(?:\.\d+)?
Покажите нам свои попытки добиться того же.