67893


下記のような文字列がある時、「。」もしくは「.」を区切り文字として、配列へ格納したい

[code]

    $str = '今日は雨です。today is rainy.明日は晴れです。 It will be fine tomorrow.';
    
[/code]

取得したい結果

[code]

    $strAry[0] = '今日は雨です。';
    $strAry[1] = 'today is rainy. ';
    $strAry[2] = '明日は晴れです。';
    $strAry[3] = 'It will be fine tomorrow.';
    
[/code]


CC BY-SA 4.0
2020-06-22T01:41:45.120
67885
2020-06-22T02:57:14.503
7886
question
php
文字列を「複数の区切り文字」で配列へ変換したい


[preg_split](https://www.php.net/manual/ja/function.preg-split.php)はいかがでしょうか。  
参照:
[複数のデリミタによるexplodeは何が速いか](https://qiita.com/khsk/items/ba5ebf62207f696ede53)

### サンプルコード

[code]

    <?php
    $str = '今日は雨です。today is rainy.明日は晴れです。 It will be fine tomorrow.';
    $strAry = preg_split("/[。\.]+/u", $str);
    print_r($strAry);
    ?>
    
[/code]

### 出力結果

[code]

    Array
    (
        [0] => 今日は雨です
        [1] => today is rainy
        [2] => 明日は晴れです
        [3] =>  It will be fine tomorrow
        [4] => 
    )
    
[/code]

回答を書いていたところ、「。」と「.」のデリミタ自体が削られていることに気づきました。  
デリミタを残す場合は単純に[preg_match_all](https://www.php.net/manual/ja/function.preg-
match-all.php)で正規表現を使う対応が手っ取り早いように思います。

### サンプルコード

[code]

    <?php
    $str = '今日は雨です。today is rainy.明日は晴れです。 It will be fine tomorrow.';
    preg_match_all("/.+?[。\.]+/u", $str, $matches);
    $strAry = $matches[0];
    print_r($strAry);
    ?>
    
[/code]

### 出力結果

[code]

    Array
    (
        [0] => 今日は雨です。
        [1] => today is rainy.
        [2] => 明日は晴れです。
        [3] =>  It will be fine tomorrow.
    )
    
[/code]


CC BY-SA 4.0
2020-06-22T02:57:14.503
67893
2020-06-22T02:57:14.503
9820
67885
answer