我需要使用正则表达式进行查找/替换。
我有以下场景:
URL 1: /test-category1/test-category-2/
URL 2: /test-category1/test-category-2/test-category3/
只有在最后一个 / 后面没有任何内容时,我如何才能用某些东西替换第一个 URL?即只替换URL1 而不是URL2?
这得到了-1'ed:
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;
}
需要明确的是,您要求在确切的 URL 上进行正则表达式替换:仅此/test-category1/test-category-2/
而已。鉴于这些要求,这就是您想要的:
preg_replace('#^/test-category1/test-category-2/$#', $replacement, $url);
只有当它后面不包含任何内容时,这才会替换确切的字符串。匹配行$
尾。
怎么样:
preg_replace('~^/[^/]+/[^/]+/$~', '/repl/ace/')
但是如果你真的想用这里不需要的正则表达式完全/test-category1/test-category-2/
替换/test-category-2/
:
if ($url == '/test-category1/test-category-2/')
$url = '/test-category-2/';
如果它位于较大字符串的中间,则可以使用负后瞻(?<!)
和负前瞻(?!)
。
<?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;