質問: 正規表現での置換えについて 正規表現を使った置換えでどうやったらいいのか悩んでいます。 やり方は、カンマで区切られた数字や英字の列をその先頭だけ残して別の記号(?など)に変換するというものです。 変換例 222,1,33333 は 2??,1,3???? へ置換え 55,22aa は 5?,2??? へ置換え 6 は 6 へ置換え(つまりそのまま) このような置換えをすることは可能でしょうか。 こういう置換えはand条件が使えないと無理なのかなとも思ったりしています。 ただ正規表現にはand条件は無いようですし。(or条件はあるようですが) mb_ereg_replaceを使って明示していただけると助かります。 もちろん複数行になっても問題ありませんし、mb_ereg_replaceでは無理という場合に別の関数を使っていただいても結構です。 よろしくお願いします。
回答: preg_replace() であれば色々と方法がありますね。 $dst = preg_replace( '/((^|,)[^,])([^,]+)/e', "'\\1'.str_repeat('?',strlen('\\3'))", $src ); mb_ereg_replace() に限定した場合、 ループさせて適用するのも面白いかもしれません。 $t = $src; do { $dst = $t; $t = mb_ereg_replace( '((^|,)[^,][?]*)[^,?]', '\\1?', $dst ); } while( strcmp( $t, $dst ) != 0 ); ※但し、データに元から「?」が含まれていると破綻します。