[英]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.