求PHP一个正则轮换

WBOY
풀어 주다: 2016-06-13 12:52:47
원래의
873명이 탐색했습니다.

求PHP一个正则替换
要把字符:cjy/dongnanya/flb-mnl/xianlu  替换为cjy/dongnanya-flb-mnl-xianlu

也就是讲把原来的字符除第一个“/”不替换,其它的都替换为“-”

php
------解决方案--------------------
$s = 'cjy/dongnanya/flb-mnl/xianlu';<br />
<br />
//方法一<br />
$t = preg_replace('#/#', '-', $s);<br />
$t = preg_replace('#-#', '/', $t, 1);<br />
echo $t;<br />
<br />
//方法二<br />
$n = 0;<br />
echo preg_replace_callback('#/#', 'foo', $s);<br />
<br />
function foo($r) {<br />
  global $n;<br />
  if($n++) return '-';<br />
  return $r[0];<br />
}<br />
<br />
로그인 후 복사

------解决方案--------------------
引用:
引用:我还是喜欢一行写完就可以替换的那种,这样如何?

PHP code?1234
谢谢,你的最简单,能解释一下吗,谢……


(?
(?:匹配“内容2”,同时断言“内容2前面有内容1”,说白了就是匹配“内容2”,但是如果前面没有内容1的话匹配失败,
(.*?)/:尽可能少的匹配字符直到匹配到“/”为止。

整个的含义就是尽可能少的匹配一段字符,这段字符是以“/”结尾,同时断言这段字符前面必须要有一个“/”,才能匹配成功,然后替换成这段字符本身,但是结尾的“/”替换成“-”。

不知是否明白。
------解决方案--------------------
引用:
preg_replace("#(?
不好意思还是有点不明白啊,为什么后面替换为内存1的字符页不是内存2里面的呢

下次回复别人记得要引用的。
(?=)(?)和(?:),这些都不会被记录在捕获内存中的。
括号的用途很多,(?#)我没记错的话是注释。
建议你有时间可以深入一下正则,知识点并不多,一天就能都掌握了,剩下的是自己没事练习一下。
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿