マルチラインの文字列から
見る:
で始まる行の、まきがみ
をすべてマキガミ
に置換したい。
まきがみ
の検出は任意文字の最短一致で挟んだものの繰り返しにすればとれるかと思ったが、そうでもない。
ちょっと時間がかかりそう&時間が空きそうなのでメモっとく。
正規表現は本当にググるの下手…
$subject = <<< EOT
見ない:あかまきがみあおまきがみきまきがみ
見る:あかまきがみあおまきがみきまきがみ
無関係なテキスト
EOT;
$pattern = '/^見る:(.*?まきがみ.*?)*/mi';
preg_match_all($pattern, $subject, $matches);
var_dump($matches);
$r = preg_replace($pattern, 'マキガミ', $subject);
var_dump($r);
$array = explode(PHP_EOL, $subject);
foreach($array as $key => $value) {
if(strpos($value, '見る:') !== 0) {
continue;
}
$array[$key] = str_replace('まきがみ', 'マキガミ', $value);
}
var_dump(implode(PHP_EOL, $array));
出力
array(2) {
[0]=>
array(1) {
[0]=>
string(58) "見る:あかまきがみあおまきがみきまきがみ"
}
[1]=>
array(1) { # ←ここが複数じゃない?
[0]=>
string(15) "きまきがみ"
}
}
string(99) "見ない:あかまきがみあおまきがみきまきがみ
マキガミ
無関係なテキスト"
string(145) "見ない:あかまきがみあおまきがみきまきがみ
見る:あかマキガミあおマキガミきマキガミ
無関係なテキスト"
strpos
は敗北を感じる…