2011-07-17 14 views
2

は、だから、私は、このようなラインこの `#((?<= ?)|&)openid 。[^&] +#` regexpはどういう意味ですか?

を見つけた...いくつかのPHPコードを読み取ることtriingい
$uri = rtrim(preg_replace('#((?<=\?)|&)openid\.[^&]+#', '', $_SERVER['REQUEST_URI']), '?'); 

それが何を意味するのでしょうか?それが(私にとってはそう思われる)「ファイル名」を返すのはなぜそれがとても複雑なのか?

+0

'?openid = xx'を' REQUEST_URL'から削除し、その結果を '$ uri'という新しい変数に入れているようです。 – RobertPitt

答えて

10

この行の目的は、要求URIからopenid.something=valueのような値を削除することです。

regexを散文に翻訳するツールがあります。これは、正規表現がどのようなものに一致しようとしているのかを理解するのに役立ちます。あなたは、説明のように戻ってくる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が使用されているため、?は含まれません。

+0

これは素晴らしいツールです。 – Joey

関連する問題