我有一个字符串(消息),其值在每次交易中都会改变。这是示例字符串:
“您的交易成功。交易ID:453712046。参考代码:1234326。谢谢!”
每次进行交易时,如何将交易ID提取为变量$ transID,并将引用代码提取为变量$ refCode作为整数值?
谢谢!
答案 0 :(得分:0)
这很丑陋,而且我敢肯定有更好的方法可以做到这一点,但这可行:
$str = "Your transaction was successful. Transaction ID: 453712046. Reference code: 1234326. Thank you!" ;
// get the starting and ending of your first string
$pos1 = strpos($str,'Transaction ID: ') + strlen('Transaction ID: ');
$pos2 = strpos($str,'.',$pos1) ;
// get your transaction ID
$transID = substr($str,$pos1, $pos2-$pos1);
// get the starting and ending of your second string
$pos1 = strpos($str,'Reference code: ') + strlen('Reference code: ');
$pos2 = strpos($str,'.',$pos1) ;\
// get your reference code
$refCode = substr($str,$pos1, $pos2-$pos1);
echo $transID . ' - ' . $refCode ;
答案 1 :(得分:0)
只需使用少量正则表达式即可轻松解决:
<?php
$str = "Your transaction was successful. Transaction ID: 453712046. Reference code: 1234326. Thank you!";
preg_match_all('#Reference code: (\d+)|Transaction ID: (\d+)#', $str, $matches);
$refCode = $matches[1][1];
$transID = $matches[2][0];
?>
preg_match_all()对字符串执行全局正则表达式匹配。意味着在第一场比赛后它不会停止。
Reference code:
和Transaction ID:
将与文字字符串匹配。
\d
匹配0-9之间的数字。
+
在一次和无限次之间进行匹配,并尽可能进行多次匹配,并根据需要进行回馈
因此,这意味着它将与参考代码:和参考代码:之后的任何数字匹配,只要不被非数字字符插入即可。
答案 2 :(得分:0)
这是另一种选择,您可以通过几种方法来实现。 这可能是易于实现和理解的,因此也很容易维护。
$str = '"Your transaction was successful. Transaction ID: 453712046. Reference code: 1234326. Thank you!"';
$find = explode(" ",$str);
$Transaction_id = (int) $find[6];
$Reference_code = (int) $find[9];
echo $Transaction_id;
echo $Reference_code;
为了起作用,文本必须相同并且只能更改数字。 即。 “您的事务未成功。事务ID:453712046。参考代码:1234326。”不会工作。
答案 3 :(得分:0)
您可以使用正则表达式,命名最好是避免混淆。
一些类似的模式
Route::group(['middleware' => ['web']], function () {
Route::get('storage/{filename}', function ($filename) {
$userid = session()->get('user')->id;
return Storage::get($userid . '/' . $filename);
});
});
对此进行播放:https://regex101.com/r/fO7ezY/1
/(?<first>Transaction ID: (?<transId>\w{1,})\.)(.*)(?<second>Reference code: (?<refCode>\w{1,})\.)/gm
如果您担心交易ID和参考代码的顺序,可以对模式进行两次匹配。