所以我正在试着阅读一些PHP代码...我找到了这样的行
$uri = rtrim(preg_replace('#((?<=\?)|&)openid\.[^&]+#', '', $_SERVER['REQUEST_URI']), '?');
Run Code Online (Sandbox Code Playgroud)
这是什么意思?如果它(对我而言)只返回'文件名'为什么它如此复杂?
sal*_*the 10
该行的目的是openid.something=value从请求URI中删除值.
有一些工具可以将正则表达式翻译成散文,目的是帮助您了解正则表达式试图匹配的内容.例如,当您的传递给这样的工具时,描述会返回:
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))
Run Code Online (Sandbox Code Playgroud)
如上所述,正则表达式寻找a ?或者&后跟openid.,然后是任何东西&.得到的匹配将包括前面的,&如果有一个,但不包括,?因为后面的后面用于后者.