我需要使用正则表达式进行查找/替换。
我有以下情况:
URL 1: /test-category1/test-category-2/
URL 2: /test-category1/test-category-2/test-category3/
我怎样才能用某些内容替换第一个URL,只有在最后一个/之后没有任何内容?我只对URL1而不是URL2进行替换吗?
答案 0 :(得分:4)
这得到了-1:
if ($url[(strlen($url) - 1)] == '/') {
$url = $replacement;
}
另一次尝试:
if (strlen(str_replace('/test-category1/test-category-2/', '', $url) == 0)) {
$url = $replacement;
}
更新
我声称拥有最好,最快的解决方案:
if ($url == '/test-category1/test-category-2/') {
$url = $replacement;
}
答案 1 :(得分:2)
要明确的是,您要求在确切的网址上替换正则表达式:/test-category1/test-category-2/
而不是其他内容。鉴于这些要求,这就是你想要的:
preg_replace('#^/test-category1/test-category-2/$#', $replacement, $url);
只有在它之后不包含任何内容时,才会替换确切的字符串。 $
匹配行尾。
答案 2 :(得分:0)
怎么样:
preg_replace('~^/[^/]+/[^/]+/$~', '/repl/ace/')
但如果您真的想要/test-category1/test-category-2/
完全替换/test-category-2/
,则此处不需要正则表达式:
if ($url == '/test-category1/test-category-2/')
$url = '/test-category-2/';
答案 3 :(得分:0)
如果它位于较大字符串的中间,则可以使用negative lookbehind (?<!)
and negative lookahead (?!)
。
<?php
$string = 'URL 1: /test-category1/test-category-2/
URL 2: /test-category1/test-category-2/test-category3/';
function swapURL($old,$replacement,$string){
$pattern = '~(?<![A-Za-z0-9])'.$old.'(?![A-Za-z0-9])~';
$string = preg_replace ($pattern,$replacement,$string);
return $string;
}
$string = swapURL('/test-category1/test-category-2/','/test-category2/',$string);
echo $string;
?>
输出
URL 1: /test-category2/
URL 2: /test-category1/test-category-2/test-category3/
如果您只为一个只有URL的固定字符串(没有新行或其他内容)执行此操作,那么您将捕获该行的开头和结尾。
function swapURL($old,$replacement,$string){
$pattern = '!^'.$old.'$!';
$string = preg_replace ($pattern,$replacement,$string);
return $string;
}
$string = swapURL('/test-category1/test-category-2/','/new-page/',$string);
echo $string;