我有一个这样的字符串:
02:58:51 05/02/2018 Username: jasonkot | Password: marryhost@992 | OTP TYPE: SMS
如何使用preg_match_all函数作为新数组获取用户名和密码的值?
谢谢!
答案 0 :(得分:1)
正则表达式:(Username|Password):\s(\S+)
详细说明:
()
捕获小组\s
匹配任何空格字符\S
匹配任何非空白字符+
匹配一次且无限次PHP代码:
$string= '02:58:51 05/02/2018 Username: jasonkot | Password: marryhost@992 | OTP TYPE: SMS ';
preg_match_all('~(Username|Password):\s(\S+)~', $string, $matches);
print_r(array_combine($matches[1], $matches[2]));
输出:
Array
(
[Username] => jasonkot
[Password] => marryhost@992
)
答案 1 :(得分:0)
您也可以通过PHP explode()
函数在没有正则表达式的情况下执行此操作。
$string = "02:58:51 05/02/2018 Username: jasonkot | Password: marryhost@992 | OTP TYPE: SMS ";
$exploded = explode("|", $string);
$array = [
"username" => trim(explode(": ", $exploded[0])[1]),
"password" => trim(explode(": ", $exploded[1])[1])
];
print_r($array);
首先,explode()
将主要字符串分成多个部分(由" |"符号):
$string = "02:58:51 05/02/2018 Username: jasonkot | Password: marryhost@992 | OTP TYPE: SMS ";
$exploded = explode("|", $string);
这将返回字符串的一部分数组,如下所示:
Array
(
[0] => 02:58:51 05/02/2018 Username: jasonkot
[1] => Password: marryhost@992
[2] => OTP TYPE: SMS
)
然后,explode()
每个段AGAIN(通过":"符号),并选择爆炸返回的第二个数组值作为用户名和密码。
$array = [
"Username" => trim(explode(": ", $exploded[0])[1]),
"Password" => trim(explode(": ", $exploded[1])[1])
];
正如您所看到的,我再次爆炸$exploded[0]
,但是在": "
符号处,这将使我将字符串分成两部分,其中第二部分是用户名/密码本身。
请务必使用trim()
删除可能遗留的任何空格。
以上将返回:
Array
(
[Username] => jasonkot
[Password] => marryhost@992
)
答案 2 :(得分:0)
您可以像这样使用正则表达式^。用户名:\ s (\ S *)\ s * \ | \ s 密码:\ s (\ S *) \ s * \ |。* $演示:https://www.phpregexonline.com/q/2