私は正規表現がとても苦手ですが、some/path/image.jpg
抜け出してhttp://somepage.com/some/...etc
この方法を試しています:
function removeDomain($string) {
return preg_replace("/http:\/\/.*\//", "", $string);
}
それは機能していません-私が知る限り、空白の文字列を返すだけです。この正規表現をどのように書くのですか?
私は正規表現がとても苦手ですが、some/path/image.jpg
抜け出してhttp://somepage.com/some/...etc
この方法を試しています:
function removeDomain($string) {
return preg_replace("/http:\/\/.*\//", "", $string);
}
それは機能していません-私が知る限り、空白の文字列を返すだけです。この正規表現をどのように書くのですか?
あなたが使用する必要がありますparse_url
正規表現ではなくこれを使用することをお勧めします: http://cz2.php.net/manual/en/function.parse-url.php これにより URL が分割されるため、ドメインの結果の配列を読み取るだけです。名前
parse_url
他の人がすでに言ったように使用してください。
しかし、正規表現が機能しない理由についての質問に答えるには、何にでも一致するため、URL全体.*
に一致し、実際にそうです。URL全体に一致し、空の文字列に置き換えているため、結果が得られます。代わりに、ホスト名 (最初の '/' までのすべて) のみに一致する以下を試してください。
function removeDomain($string) {
return preg_replace("@^https?://[^/]+/@", "", $string);
}
/
SilentGhost は正しいですが、正規表現が失敗する理由は .* が貪欲であり、その後がある限りすべてを食べてしまうからです。
?
の後にマークを付ける.*
と、最初までしか一致しません。/
function removeDomain($string) {
return preg_replace("/http:\/\/.*?\//", "", $string);
}