匹配所有重复出现的正则表达式

Match all repeating occurrences regex

我需要匹配以 "Token" 开头的空格分隔的字符串。
示例字符串

Token token=12eqddsfasdsa user_email=user@mail.com app_id=2312edsdas

我试过几种表达方式。

^Token (\w*=[^-\s]+)

仅捕获一个第一个匹配项。

^Token(\s\w*=[^-\s]+)+

此表达式仅捕获最后一个。

我需要捕获

match[0] = token=12eqddsfasdsa
match[1] = user_email=user@mail.com
match[2] = app_id=2312edsdas

我知道有很简单的方法可以达到这个结果,但我没有足够的经验来获得它。
请帮忙解决这个问题。

您面临着为重复组捕获内容的常见问题,因此 我会为此使用两个正则表达式:

1- 首先使用此正则表达式检测以 Token 模式开头的行:

^Token

2- 要提取您感兴趣的匹配项,请使用另一个正则表达式(如您的正则表达式):

(\w*=[^-\s]+)

您可以使用这样的代码

$str = <your string>
if (preg_match("/^Token/", $str)) {
    preg_match_all('/(\w*=[^-\s]+)/', $str, $matches);
}

比赛信息

MATCH 1
1.  [6-25]  `token=12eqddsfasdsa`
MATCH 2
1.  [26-50] `user_email=user@mail.com`
MATCH 3
1.  [51-68] `app_id=2312edsdas`

我认为简单的方法是使用 explode 函数。

$str = "Token token=12eqddsfasdsa user_email=user@mail.com app_id=2312edsdas";
$result = explode(" ", $str);

结果会是这样的:

Array ( [0] => "Token" [1] => "token=12eqddsfasdsa". [2] => "user_email=user@mail.com"  [3] => "app_id=2312edsdas")