所以我试着读一些PHP代码......我找到了这样的行
$uri = rtrim(preg_replace('#((?<=\?)|&)openid\.[^&]+#', '', $_SERVER['REQUEST_URI']), '?');
这是什么意思?如果它(对我而言)只返回'文件名'为什么它如此复杂?
答案 0 :(得分:10)
该行的目的是从请求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用于后者。