73770


phpにおいて文字列内の `{}` の中とその外側を取り出す方法を探しています。

まず `{}` の中身を取り出すのはこれでうまくいきました。

[code]

    $subject = 'こんにちは、{ 鈴木 } さん。おはよう {渡辺} さん！';
    preg_match_all('/\{(.+?)\}/', $subject, $matches);
    
[/code]

$matchesの結果

[code]

    array:2 [▼
      0 => array:2 [▼
        0 => "{ 鈴木 }"
        1 => "{渡辺}"
      ]
      1 => array:2 [▼
        0 => " 鈴木 "
        1 => "渡辺"
      ]
    ]
    
[/code]

そしてこの `{}` の中身以外の文字列を取得したいのですがどのようにしたらよいでしょうか。  
下記のように区分けされた配列で取得したいです。

[code]

    'こんにちは、'
    ' さん。おはよう '
    ' さん！';
    
[/code]

尚、文章 (`$subject`) や `{}` の数はどんな風にも変わります。

[code]

    $subject = 'やあ{マイケル}。モーニング! {John}. よし{レッツゴー}。';
    
[/code]

解決するのに正規表現を使ってなくてもかまいません。


CC BY-SA 4.0
2021-02-03T02:04:44.913
73769
2021-02-03T05:03:48.587
2021-02-03T05:03:48.587
3060
34267
question
php 正規表現
phpの正規表現で特定文字列以外を取り出す


マッチした文字列 `$matches[0]` を `implode()`
で結合して正規表現を作り、[preg_split()](https://www.php.net/manual/en/function.preg-
split.php)で元の文字列を分割します。

[code]

    $subject = 'こんにちは、{ 鈴木 } さん。おはよう {渡辺} さん!';
    
    preg_match_all('/\{(.+?)\}/', $subject, $matches);
    $rest = preg_split('('.implode('|', $matches[0]).')', $subject);
    
    var_dump($rest);
    =>
    array(3) {
      [0]=>
      string(18) "こんにちは、"
      [1]=>
      string(23) " さん。おはよう "
      [2]=>
      string(8) " さん!"
    }
    
[/code]


CC BY-SA 4.0
2021-02-03T02:54:53.747
73770
2021-02-03T02:54:53.747
73769
answer