我需要匹配以“令牌”开头的空格分隔的后续字符串。
示例字符串
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
我知道有很简单的方法来实现这个结果,但我没有足够的经验来获得它 请帮忙。
答案 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")