0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【未解決】特定条件行の特定文字をすべて置換する正規表現

Posted at

マルチラインの文字列から
見る:で始まる行の、まきがみをすべてマキガミに置換したい。

まきがみの検出は任意文字の最短一致で挟んだものの繰り返しにすればとれるかと思ったが、そうでもない。

ちょっと時間がかかりそう&時間が空きそうなのでメモっとく。
正規表現は本当にググるの下手…

$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は敗北を感じる…

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?