在PHP中提取部分字符串

时间:2018-06-22 23:56:28

标签: php

我有一个字符串(消息),其值在每次交易中都会改变。这是示例字符串:

“您的交易成功。交易ID:453712046。参考代码:1234326。谢谢!”

每次进行交易时,如何将交易ID提取为变量$ transID,并将引用代码提取为变量$ refCode作为整数值?

谢谢!

4 个答案:

答案 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和参考代码的顺序,可以对模式进行两次匹配。