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的