0

次のような URL があります。

http://Example.com/mobile-ds-cams/mobile-gg-cams/ddd-webcams

例:

$pattern = '/http://Example.com/(\w+)/(\w+)/(\w+)/i';               
$replacement="http://Example.com/$2/$3";
$appUrl= preg_replace($pattern, $replacement, $appUrl);

私が達成したいのはこれです

http://Example.com/mobile-gg-cams/ddd-webcams

「サブ URL」を 3 つではなく 2 つ保持しようとしていますが、機能しません。なぜですか?

4

3 に答える 3

3

パターン内のスラッシュをエスケープするか、別のパターン区切り文字を使用する必要があります。

$pattern = '/http:\/\/Example\.com\/(\w+)\/(\w+)\/(\w+)/i';               

$pattern = '#http://Example\.com/(\w+)/(\w+)/(\w+)#i';               
于 2012-05-08T12:45:05.370 に答える
0

適切に引用されていない正規表現で特別な意味を持つ文字が式に含まれているため、正しく機能しません。

100% 確実にするには、preg_quote次のように使用します。

$url = 'http://Example.com/'
$pattern = preg_quote($url.'{word}/{word}/{word}', '/');
$pattern = str_replace($pattern, '{word}', '(\w+)');
$pattern = "/$pattern/i";
$replacement = $url.'$2/$3';
$appUrl= preg_replace($pattern, $replacement, $appUrl);

そうしないと、簡単に間違えてしまいます。たとえば、現在ここに投稿されている他のすべて.の回答は、 in を適切にエスケープしていないため、間違っていますExample.comhttp://Example!comのような文字列を入力すると、これを自分でテストでき!ます。

さらに、$2二重引用符で囲まれた文字列リテラルなどの文字列を使用していますが、これは PHP ではお勧めできません。それを一重引用符にして、安全を確保してください。

于 2012-05-08T12:48:50.047 に答える
0

次のようにスラッシュをエスケープします。

$pattern = '/http:\/\/Example.com\/(\w+)\/(\w+)\/(\w+)/i';               
$replacement="http://Example.com/$2/$3";
$appUrl= preg_replace($pattern, $replacement, $appUrl);
于 2012-05-08T12:46:50.800 に答える