regex,在第一个单词后获取所有字符,直到空格或回车


regex, after first word get all character until blank space or enter

hai我是regex新手我想问一些关于php中regex的问题首先我有这样的字符串:

#HttpOnly_www.xyz.com   FALSE   /   TRUE    1468386389  sessionid IGSC4c9b34af03c4d6a83e9ac949d5f32a6f9a50ced1362b1797cec54ceac3c57110%3Agp888l8neqxFTtJHXMPWkQfIQ9uKv113%3A%7B%22_token_ver%22%3A2%2C%22_auth_user_id%22%3A2251871689%2C%22_token%22%3A%222251871689%3ApZdi2i1V6EtoR3p7CgADOomNZLxUta74%3A9d2adf87ebeeb84899dba1a383ef822aeb0a9b7d13c50b6052df407f25c676a2%22%2C%22asns%22%3A%7B%222600%3A3c02%3Ae001%3A1a96%3A28ed%3Ab4b%3Ab8bb%3A2c5f%22%3A17025%2C%22time%22%3A1460610396%7D%2C%22_auth_user_backend%22%3A%22accounts.backends.CaseInsensitiveModelBackend%22%2C%22last_refreshed%22%3A1460610395.854883%2C%22_platform%22%3A4%7D   www.xyz.com FALSE   /   FALSE   1460613989  s_network   

我的代码是这样的:

$cotext = file_get_contents($cookieFile);
preg_match('/(sessionid)'s[^'S]*/', $cotext, $id);

我只想得到这样的数组:

array [0] => "sessionid"
array [1] => "IGSC4c9b34af03c4d6a83e9ac949d5f32a6f9a50ced1362b1797cec54ceac3c57110%3Agp888l8neqxFTtJHXMPWkQfIQ9uKv113%3A%7B%22_token_ver%22%3A2%2C%22_auth_user_id%22%3A2251871689%2C%22_token%22%3A%222251871689%3ApZdi2i1V6EtoR3p7CgADOomNZLxUta74%3A9d2adf87ebeeb84899dba1a383ef822aeb0a9b7d13c50b6052df407f25c676a2%22%2C%22asns%22%3A%7B%222600%3A3c02%3Ae001%3A1a96%3A28ed%3Ab4b%3Ab8bb%3A2c5f%22%3A17025%2C%22time%22%3A1460610396%7D%2C%22_auth_user_backend%22%3A%22accounts.backends.CaseInsensitiveModelBackend%22%2C%22last_refreshed%22%3A1460610395.854883%2C%22_platform%22%3A4%7D"

你们能帮我吗?

这将适用于

(正如OP在评论中提到的,sessionid之后的字符串总是以IGSC开头)

(sessionid)'s+(IGSC[^'s]+)

Regex演示

记住[^'s] -> ['S]。所以你可以使用任何一个作为你的愿望

PHP代码

$re = "/(sessionid)''s+(IGSC[^''s]+)/"; 
$str = "#HttpOnly_www.xyz.com   FALSE   /   TRUE    1468386389  sessionid IGSC4c9b34af03c4d6a83e9ac949d5f32a6f9a50ced1362b1797cec54ceac3c57110%3Agp888l8neqxFTtJHXMPWkQfIQ9uKv113%3A%7B%22_token_ver%22%3A2%2C%22_auth_user_id%22%3A2251871689%2C%22_token%22%3A%222251871689%3ApZdi2i1V6EtoR3p7CgADOomNZLxUta74%3A9d2adf87ebeeb84899dba1a383ef822aeb0a9b7d13c50b6052df407f25c676a2%22%2C%22asns%22%3A%7B%222600%3A3c02%3Ae001%3A1a96%3A28ed%3Ab4b%3Ab8bb%3A2c5f%22%3A17025%2C%22time%22%3A1460610396%7D%2C%22_auth_user_backend%22%3A%22accounts.backends.CaseInsensitiveModelBackend%22%2C%22last_refreshed%22%3A1460610395.854883%2C%22_platform%22%3A4%7D   www.xyz.com FALSE   /   FALSE   1460613989  s_network"; 
preg_match($re, $str, $matches);

您的结果在matches[1]matches[2]

Ideone演示

您的匹配模式字符串应该是"/(sessionid)'s('S*)/"

1.因为'' s匹配空格,'' s匹配非空格。你不应该把^放在''S之前。

2.如果您想捕获会话ID,您应该在''S*周围添加括号。

因此,$id现在是
大堆([0]=>会话IGSC4c9b34af03c4d6a83e9ac949d5f32a6f9a50d1362b1797cec54ceac3c57110%3Agp888l8neqxFTtJHXMPWkQfIQ9uKv113%3A%7B%22_token_ver%22%3A2%2C%22_outh_user_id%22%3A2251871689%2C%22_token%22%3A%2222251871689%3APZdi2i16EtoR3p7CgADOomNZLxUta74%2%2C%22asns%22%3A%7B%222600%3A3c02%3Ae001%3A1a96%3A28ed%3Ab4b%3Ab8b%3Ab5f%22%3A17025%2C%22时间%22%3A1460610396%7D%2C%22_auth_user_backend%22%3A%22帐户。bac肯兹。CaseInsensitiveModelBackend%22%2C%22last_refreshd%22%3A1460610395.854883%2C%22_平台%22%3A4%7D[1] =>会话ID[2] =>IGSC4c9b34af03c4d6a83e9ac949d5f32a6f9a50d1362b1797cec54ceac3c57110%3Agp888l8neqxFTtJHXMPWkQfIQ9uKv113%3A%7B%22_token_ver%22%3A2%2C%22_auth_user_id%22%3A2251871689%2C%22_token%22%3A%222251871689%3ApZdi2i16EtoR3p7gADoomNZLxUta74%3A9d2adf87ebeeb84899dba1a383ef822aeb0a9b7d13c50b6052df407f25c676a22%2C%2asns%22%3A%7B%222600%3A3c02%3Ae01%3A1a96%3A28ed%3Ab4b%3Ab8b%3Ab5f%22%3A17025%2C%22time%22%3A1460610396%7D%2C%22_auth_user_backend%22%3A%22accounts.backends.Case不敏感模型后端%22%2C%22_last_refreshd%22%3A1460610395.54883%2C%22_plat表单%22%3A4%7D)

注意,$id[0]是整个匹配字符串,而$id[1]$id[2]与它们匹配括号。

正则表达式中有两个小错误。首先,您的第二组需要一个"(",以便您可以访问它。
其次,如果您使用''S,则不需要^。所以,它看起来是这样的:

(sessionid)'s+('S*)

在这里,您可以测试regex的