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 />
ログイン後にコピー
------解決策----------------------
(?<=/)(.*?)/
(?<=コンテンツ 1) コンテンツ 2: 「コンテンツ 2」に一致し、「コンテンツ 2 の前にコンテンツ 1 がある」ことを主張します。端的に言えば、「コンテンツ 2」に一致します。コンテンツ 1 がありません。その前に一致が失敗しました。
(.*?)/: 「/」が一致するまで、できるだけ少ない文字と一致します。
全体の意味は、できるだけ少ない文字と一致することです。この文字は「/」で終わりますが、同時に、正常に一致するためにはこの文字の前に「/」が必要であることが主張され、その後置換されます。文字自体を入力しますが、末尾の「/」を「-」に置き換えます。
理解できるかどうかはわかりません。
------解決策---------
次回他の人に返信するときは、忘れずに引用してください。
(?=)(?<=)(?!)(?) および (?:) と同様にアサーションであり、キャプチャ メモリには記録されません。
括弧にはさまざまな用途があります。私の記憶が正しければ (?#) はコメントです。
時間があるときにルールを深く理解することをお勧めします。知識ポイントはそれほど多くないので、残りは練習してください。