求PHP一个正则替换 要把字符:cjy/dongnanya/flb-mnl/xianlu 替换为cjy/dongnanya-flb-mnl-xianlu也就是讲把原来的字符除第一个“/”不替换,其它的都替换为“-”php 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不用正则还简单点$s='cjy/dongnanya/flb-mnl/xianlu';$f= strtok($s,'/');$str=$f.'/'.str_replace('/','-' ,substr(strstr($s,'/'),1));echo $str; $s = 'cjy/dongnanya/flb-mnl/xianlu';//方法一$t = preg_replace('#/#', '-', $s);$t = preg_replace('#-#', '/', $t, 1);echo $t;//方法二$n = 0;echo preg_replace_callback('#/#', 'foo', $s);function foo($r) { global $n; if($n++) return '-'; return $r[0];} 使用字符串函数$s = 'cjy/dongnanya/flb-mnl/xianlu';$t = explode('/', $s, 2);echo $t[0] . '/'. strtr($t[1], '/', '-'); 我还是喜欢一行写完就可以替换的那种,这样如何?<?php $str = 'cjy/dongnanya/flb-mnl/xianlu';$str = preg_replace("#(?<=/)(.*?)/#", '\1-', $str);echo $str; (?<=/)(.*?)/(?<=内容1)内容2:匹配“内容2”,同时断言“内容2前面有内容1”,说白了就是匹配“内容2”,但是如果前面没有内容1的话匹配失败,(.*?)/:尽可能少的匹配字符直到匹配到“/”为止。整个的含义就是尽可能少的匹配一段字符,这段字符是以“/”结尾,同时断言这段字符前面必须要有一个“/”,才能匹配成功,然后替换成这段字符本身,但是结尾的“/”替换成“-”。不知是否明白。 preg_replace("#(?<=/)(.*?)/#", '\1-', $str);不好意思还是有点不明白啊,为什么后面替换为内存1的字符页不是内存2里面的呢 下次回复别人记得要引用哦,不然是收不到回复的。(?=)(?<=)(?!)(?<!)这些都是断言,以及(?>)和(?:),这些都不会被记录在捕获内存中的。括号的用途很多,(?#)我没记错的话是注释。建议你有时间可以深入一下正则,知识点并不多,一天就能都掌握了,剩下的是自己没事练习一下。 IIS可以与Apche并存吗 ThinkPHP 关闭调试模式 ecshop 2.7在首页怎么调用分类小的商品的 销售排行 服务器时好时坏 问个.htaccess通用写法怎么写 见证高手的时候了,求高手在线解密PHP,发代码 谁有php大型网站的项目案例?大流量高并发的 phpcms搜索引擎post方式是怎么设置的 数组重组 求助:两条RewriteRule规则 单独使用都生效,一起用只有一条有效 请教百度商桥的安装和使用方法 求类似于csdn编辑器
$s='cjy/dongnanya/flb-mnl/xianlu';
$f= strtok($s,'/');
$str=$f.'/'.str_replace('/','-' ,substr(strstr($s,'/'),1));
echo $str;
$t = preg_replace('#/#', '-', $s);
$t = preg_replace('#-#', '/', $t, 1);
echo $t;//方法二
$n = 0;
echo preg_replace_callback('#/#', 'foo', $s);function foo($r) {
global $n;
if($n++) return '-';
return $r[0];
}
$t = explode('/', $s, 2);
echo $t[0] . '/'. strtr($t[1], '/', '-');
$str = 'cjy/dongnanya/flb-mnl/xianlu';
$str = preg_replace("#(?<=/)(.*?)/#", '\1-', $str);
echo $str;
(?<=/)(.*?)/(?<=内容1)内容2:匹配“内容2”,同时断言“内容2前面有内容1”,说白了就是匹配“内容2”,但是如果前面没有内容1的话匹配失败,
(.*?)/:尽可能少的匹配字符直到匹配到“/”为止。整个的含义就是尽可能少的匹配一段字符,这段字符是以“/”结尾,同时断言这段字符前面必须要有一个“/”,才能匹配成功,然后替换成这段字符本身,但是结尾的“/”替换成“-”。不知是否明白。
(?=)(?<=)(?!)(?<!)这些都是断言,以及(?>)和(?:),这些都不会被记录在捕获内存中的。
括号的用途很多,(?#)我没记错的话是注释。
建议你有时间可以深入一下正则,知识点并不多,一天就能都掌握了,剩下的是自己没事练习一下。