使用php preg_match_all获取字符串值?

时间:2018-02-05 16:42:36

标签: php regex string preg-match-all

我有一个这样的字符串:

02:58:51 05/02/2018 Username: jasonkot |  Password: marryhost@992 | OTP TYPE: SMS 

如何使用preg_match_all函数作为新数组获取用户名和密码的值?

谢谢!

3 个答案:

答案 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