2015-11-03 74 views
0

我需要将/ some/string/page/45仅替换为/ some/string。这是我用它︰正则表达式删除/页/ 1

preg_replace('~((?<=\?)page/\d+&?|&page/\d+)~i', '', $this->__tmp) 

但它不适合我。我试着在网上的工具来生成正则表达式,我需要,但它太难为我..我需要更换/页/(任意数量)

我也已经产生了这样一条:

preg_replace('~(page/\d+)~i', '', $this->__tmp); 

,它看起来作品很好,但我不知道它是否正确。

+0

你只是想删除最后一个'/'后的所有内容吗? –

+0

例如我有'some/string/more/options/page/2',我只需要'some/string/more/options' –

回答

4
<?php 

$str = 'asd/qwe/page/123'; 

$result = preg_replace('(/page/\d+)', '', $str); 

var_dump($result); 

结果:

<?php 

$str = '////asd/qwe/page/123////'; 

$result = preg_replace('~^(/)*(.*)(/page/\d+)(/)*~', '$2', $str); 

var_dump($result); 

string(8) "asd/qwe" 

如果你想删除首末斜杠(不要求第一和最后一个斜杠,在字符串的开始和结束字符串支持了许多斜杠)

+0

谢谢,那也适用。有没有任何选项可以扩展它以从字符串中删除第一个和最后一个斜杠?对我来说不是必要的,但也许别人会发现它作为答案 –

+0

已添加到答复 –

0

如果您不介意在preg_replace上使用preg_match,您可以这样做:

<?php 

$regex = "/(?!^\/).*(?=\/page)/"; 
$regStr = "/some/string/page/45"; 

preg_match($regex, $regStr, $results); 

print_r($results); 

?> 

而结果将是:

Array ([0] => some/string) 

希望这有助于!