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

时间:2015-06-11 23:00:10

标签: php regex preg-match

我需要匹配以“令牌”开头的空格分隔的后续字符串。
示例字符串

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

我知道有很简单的方法来实现这个结果,但我没有足够的经验来获得它 请帮忙。

2 个答案:

答案 0 :(得分:2)

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

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`

答案 1 :(得分:2)

我认为简单的方法是使用爆炸功能。

$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")