gpt4 book ai didi

php - 这个 `#((?<=\?)|&)openid\.[^&]+#` 正则表达式是什么意思?

转载 作者:行者123 更新时间:2023-12-03 02:17:02 24 4
gpt4 key购买 nike

所以我正在尝试阅读一些 php 代码...我发现了这样的行

$uri = rtrim(preg_replace('#((?<=\?)|&)openid\.[^&]+#', '', $_SERVER['REQUEST_URI']), '?');

这是什么意思?如果它(在我看来)只返回“文件名”,为什么它如此复杂?

最佳答案

该行的目的是从请求 URI 中删除诸如 openid.something=value 之类的值。

有一些工具可以将正则表达式翻译成散文,目的是帮助您了解正则表达式试图匹配的内容。例如,当您的传递给 such a tool 时描述返回为:

NODE                     EXPLANATION
--------------------------------------------------------------------------------
( group and capture to \1:
--------------------------------------------------------------------------------
(?<= look behind to see if there is:
--------------------------------------------------------------------------------
\? '?'
--------------------------------------------------------------------------------
) end of look-behind
--------------------------------------------------------------------------------
| OR
--------------------------------------------------------------------------------
& '&'
--------------------------------------------------------------------------------
) end of \1
--------------------------------------------------------------------------------
openid 'openid'
--------------------------------------------------------------------------------
\. '.'
--------------------------------------------------------------------------------
[^&]+ any character except: '&' (1 or more times
(matching the most amount possible))

如上所述,正则表达式查找 ?&,后跟 openid.,后跟任何非 & 的内容。如果有的话,结果匹配将包括前面的 &,但不包括 ?,因为 look behind用于后者。

关于php - 这个 `#((?<=\?)|&)openid\.[^&]+#` 正则表达式是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6723340/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com