

以下のような文字列があり、[]を取り除きたいです。どのような正規表現を書けば実現できますでしょうか。  
詳しい方、ご教示下さい。

あいうえお[aiu]  
↓  
あいうえお


CC BY-SA 3.0
2016-05-18T08:26:28.757
24965
2016-06-26T12:00:54.773
2016-06-26T12:00:54.773
3974
8619
question
php html 正規表現
文字列の中から[]で囲った部分を除去する正規表現


正規表現で取り除く、ということで[preg_replace](http://php.net/manual/ja/function.preg-
replace.php)を使うものと推察します。また、削除対象は文字列末尾の`[`と`]`で囲まれた文字列であると理解して、この場合は以下のような正規表現を用いて部分文字列を削除します。

[code]

    $input = 'あいうえお[aiu]';
    
    $regexp = '/\[[^\]]*\]$/m';
    
    $output = preg_replace($regexp, '', $input);
    
[/code]

* * *

正規表現について一定程度知識をお持ちでしたらここは蛇足です。

[code]

    \[[^\]]*\]$
    
[/code]

![Regular expression
visualization](https://www.debuggex.com/i/GBFym9oyiq8YBfGD.png)

[Debuggex Demo](https://www.debuggex.com/r/GBFym9oyiq8YBfGD)

正規表現の構成は、まず`[`で始まる部分文字列の検索を開始し、`[^\]*`の部分で終了文字である`]`がみつかるまでマッチングを続けます。その後`]`が来れば部分文字列としてマッチします。質問内容から文字列の末尾を想定して、最後の`$`でこの部分文字列が文字列の最後にある条件を設定していますが、場所が不定であればこれを削除することで期待する処理が得られるでしょう。

* * *

それ以外に、この順番で文字列が来るならば、正規表現を使わずに`[`で文字列を分割して、最初の要素を取り出すやり方もあります。

[code]

    $output = array_shift(explode('[', $input));
    
[/code]

あるいは、`preg_match`で必要な前半部分をマッチさせて取り出したりすることもできます。

[code]

    if (preg_match('/^[^\[]*/m', $input, $matches)) {
        $output = $matches[0];
    }
    
[/code]

いろいろ試してみて、必要に見合った適切なものを見つけてみてください。


CC BY-SA 3.0
2016-05-18T13:41:06.530
24977
2016-05-18T13:41:06.530
24965
answer