RegEx для извлечения мобильных номеров с определенным форматом - PullRequest
2 голосов
/ 07 мая 2019

У меня есть смс текст от mysql. Текст содержит 5 типов текста. Во-первых, формат мобильного номера 11 (01 ***********). И две суммы денег, один идентификатор транзакции с 10-значными заглавными буквами и цифрой и датой и временем. Мне нужно извлечь каждый текст и сохранить его в разных переменных.

Пример текста: Cash In Tk 500.00 из 01789788881 успешно. Плата Тк 0,00 . Баланс ТК 4145,08. TrxID 6E63D2OS4R при 06/05/2019 20: 24 .

Пока я пытался извлечь номер телефона

$sms_text = $result['sms_text'];

preg_match('/\b\d{3}\s*-\s*\d{3}\s*-\s*\d{4}\b/', $sms_text, $sms_from);

echo $sms_from;
echo $cash_in_amount;
echo $fee;
echo $ trx_id;
echo $trx_time;

Как мне решить эту проблему?

1 Ответ

1 голос
/ 07 мая 2019

Вы можете использовать это регулярное выражение и извлечь три значения из group1, group2 и group3, и, конечно, я могу предположить, что ваш текст SMS будет в том же формате.

from\s+(\d+).*([a-zA-Z0-9]{10})\s+at\s+(.*)

Regex Demo 1

Демонстрационный код PHP

$sms = 'Cash In Tk 500.00 from 01789788881 successful. Fee Tk 0.00. Balance Tk 4,145.08. TrxID 6E63D2OS4R at 06/05/2019 20:24';
preg_match_all('/from\s+(\d+).*([a-zA-Z0-9]{10})\s+at\s+(.*)/', $sms, $matches);
print('Mobile Number: '.$matches[1][0]."\n");
print('Transaction Id: '.$matches[2][0]."\n");
print('Date Time: '.$matches[3][0]."\n");

Выход

Mobile Number: 01789788881
Transaction Id: 6E63D2OS4R
Date Time: 06/05/2019 20:24

Edit:

Для получения Cash In Tk 500.00 and Fee Tk 0.00 вы можете использовать следующее регулярное выражение,

(\S+)\s+from\s+(\d+).*Fee\s+Tk\s+(\S+)\..*([a-zA-Z0-9]{10})\s+at\s+(.*)

Regex Demo 2

Обновленная демонстрация PHP

$sms = 'Cash In Tk 500.00 from 01789788881 successful. Fee Tk 0.00. Balance Tk 4,145.08. TrxID 6E63D2OS4R at 06/05/2019 20:24';
preg_match_all('/(\S+)\s+from\s+(\d+).*Fee\s+Tk\s+(\S+)\..*([a-zA-Z0-9]{10})\s+at\s+(.*)/', $sms, $matches);
print('Cash In Tk: '.$matches[1][0]."\n");
print('Mobile Number: '.$matches[2][0]."\n");
print('Fee Tk: '.$matches[3][0]."\n");
print('Transaction Id: '.$matches[4][0]."\n");
print('Date Time: '.$matches[5][0]."\n");

печать

Cash In Tk: 500.00
Mobile Number: 01789788881
Fee Tk: 0.00
Transaction Id: 6E63D2OS4R
Date Time: 06/05/2019 20:24
...