首页 > 解决方案 > 正则表达式/ PHP - 在包含两个变量的文本中查找字符串

问题描述

我希望在日志文件中找到 URL 的所有匹配项,然后提取这些匹配项的一些数据。我对正则表达式一点也不擅长,所以我找不到。

我试图找到的事件:

// this is the string i want to find,
// in every match 1113321569 and the acceses_token will change

Api::log : {"url":"https://api.test.com//v0/notes/1113321569/notes?access_token=eyJhbGciOiJSUzI1NiJ9.eyJydGUiOiIxNTYyMDM5NjUxNDgxIiwidXNlcl9pZCI6MTAzMTU1MzI0MywidXNlcl9"

基本上我需要一个正则表达式来找到具有1113321569eyJhbGciOiJSUzI1NiJ9.eyJydGUiOiIxNTYyMDM5NjUxNDgxIiwidXNlcl9pZCI6MTAzMTU1MzI0MywidXNlcl9作为变量的文本,在我找到整个字符串之后,我需要提取这两个变量。

你们能帮帮我吗?

标签: phpregexpreg-match-all

解决方案


您可以使用正则表达式之类的东西(?<=\/)(\d+)(?=\/).+(?:=)(\S+)(?:")

preg_match('/(?<=\/)(\d+)(?=\/).+(?:=)(\S+)(?:")/', $input_line, $output_array);

可视化

这利用了积极的后视和积极的前瞻来对两个目标进行分组:

array(3
    0   =>  1113321569/notes?access_token=eyJhbGciOiJSUzI1NiJ9.eyJydGUiOiIxNTYyMDM5NjUxNDgxIiwidXNlcl9pZCI6MTAzMTU1MzI0MywidXNlcl9"
    1   =>  1113321569
    2   =>  eyJhbGciOiJSUzI1NiJ9.eyJydGUiOiIxNTYyMDM5NjUxNDgxIiwidXNlcl9pZCI6MTAzMTU1MzI0MywidXNlcl9
)

可以在此处查看 Regex101和此处PHPLiveRegex 。


推荐阅读