1

別の質問には、次の行があります。

$value='x-Cem-Date:Wed, 16 Dec 2009 15:42:28 GMT';
$value = preg_replace('/(^.+?)(?=:)/e', "strtolower('\\1')", $value);
// yields 'x-cem-date:Wed, 16 Dec 2009 15:42:28 GMT'

その(?=:)ビットは、コロンの検索を示します。そうする必要があります。しかし、私はその特定の構文を理解していません?=. そこでは何が起こっているのでしょうか?

4

1 に答える 1

5

それは前向きな先読みです。特定の部分式がそのポイントの後に発生するかどうかを調べます。ただし、試合では何も消費しません。

正の先読みも同じように機能します。q(?=u)一致の一部を作成せずに、qa が後に続く aに一致します。正の先読み構造は、1 組の丸括弧で、左括弧の後に疑問符と等号が続きます。—<a href="http://www.regular-expressions.info/lookaround.html" rel="nofollow noreferrer">RegularExpressions.infouu

お気づきかもしれませんが、置換テキストに周囲の環境を含める必要がないため、ルックアラウンドはテキストを置換するときに特に役立ちます。たとえば、qa が続かないすべてを置き換えるには、次のようuにしquます。

replace 'q([^u])' by 'qu\1'

ただし、これは次の文字をキャプチャします。これは、一致の一部であり、後で再度挿入するためです。ルックアラウンドを使用することもできます。

replace 'q(?!u)' by 'qu'

q のみが一致して置換されるため、置換文字列に一致の一部を含める必要はなくなりました。

于 2009-12-16T16:27:01.430 に答える