繁体   English   中英

preg_replace不匹配

[英]preg_replace not matching

由于我不熟悉正则表达式,因此我遇到了preg_replace的问题。

我正在使用此工具进行测试,但替换无法正常工作。

我输入以下内容: http://example.com/test-menu/d/C101 : http://example.com/test-menu/d/C101 我期望得到以下输出: http://example.com/test-menu/d/101 : http://example.com/test-menu/d/101 我只想删除字母C

d可以是任何字母数字字符)

我正在尝试使用此正则表达式。

这是该网站生成的php:

<?php 
    $ptn = "/\/test-menu\/(.)\/C/";
    $str = "http://example.com/test-menu/d/C101";
    $rpltxt = "/test-menu/$1";
    echo preg_replace($ptn, $rpltxt, $str);
?>

我的正则表达式不匹配。 我在这里想念什么?

您的主要问题是,在调用preg_replace()之前,已扩展$rpltxt中的变量。

我还将数字捕获添加到末尾,并使第一个捕获特定于字母字符。 在您的模式中尽可能地具体总是一件好事。

<?php 
$ptn = "#/test-menu/([a-zA-Z])/C(\d+)#";
$str = "http://example.com/test-menu/d/C101";
$rpltxt = '/test-menu/$1/$2';
echo preg_replace($ptn, $rpltxt, $str);

更新:更改了每个cbuckley漂亮注释的正则表达式分隔符。

或者:

$ptn = '/(?<=\/test-menu\/.\/)C/';
$rpltext = '';

(它使用(?<= ... )的正向后方)

要么:

$ptn = '/(\/test-menu\/.\/)C/';
$rpltext = '$1';

(它将捕获第一个子匹配项中的整个前面的字符串,除了C以外的所有字符串)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM