【问题标题】:Get string value using php preg_match_all?使用 php preg_match_all 获取字符串值?
【发布时间】:2018-02-05 16:42:36
【问题描述】:

我有一个这样的字符串:

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

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

谢谢!

【问题讨论】:

  • 请发布您当前不起作用的正则表达式。
  • | 上爆炸,然后在: 上爆炸1
  • stackoverflow.com/help/how-to-ask -- 也就是说,在线查找函数的文档并阅读提供的示例。如果您的问题仍然存在,请返回并提出具体问题,但不要将您的作业丢在这里,希望有人会为您完成。
  • @UlrichEckhardt 谢谢。但实际上我已经尝试了我认为在 www.phpliveregex.com 上正确的正则表达式,但我去这里都失败了。我不是懒惰的流浪汉。
  • 好吧,但是您想不出任何详细说明您的失败的示例代码吗?在研究之后编写的代码以及您在仔细研究后所期望的行为与实际行为不匹配的地方?你声称你没有偷懒,所以也提取一个最小的例子!这不仅是为了确保您不偷懒,而且还确保您不会提出本可以自己解决的愚蠢问题。

标签: php regex string preg-match-all


【解决方案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
)

【讨论】:

  • 完美运行!谢谢。你的正则表达式看起来很简单。一开始我觉得太难了。
【解决方案2】:

您也可以通过 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() 再次每个段(通过“:”符号),并选择从爆炸返回的第二个数组值作为用户名和密码。

$array = [
  "Username" => trim(explode(": ", $exploded[0])[1]), 
  "Password" => trim(explode(": ", $exploded[1])[1])
];

如您所见,我再次分解了$exploded[0],但在": " 符号处,这将使我将字符串分成两部分,其中第二部分是用户名/密码本身。

请务必使用trim() 删除任何可能留下的空白。

上面会返回:

Array
(
    [Username] => jasonkot
    [Password] => marryhost@992
)

【讨论】:

    【解决方案3】:

    您可以像这样使用正则表达式 ^.用户名:\s(\S*)\s*\|\s密码:\s(\S*) \s*\|.*$ 演示:https://www.phpregexonline.com/q/2

    【讨论】:

      猜你喜欢
      • 2018-05-07
      • 2011-01-27
      • 2011-06-03
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多