0

文字列内の不要な/余分な括弧が見つかった場合に削除できる正規表現が必要です。

例:

Bob Barker LIVE! (((Don't Miss out!)))

望んでいた結果:

Bob Barker LIVE! (Don't Miss out!)

ユーザーがそれらを使いすぎない限り、ユーザーがそれらを使用してもかまいません。また、それらを閉じてください。

フィードバックをお寄せいただきありがとうございます。

4

5 に答える 5

3

これは、正規表現 + 再帰を使用して効果的に行うことができます。何もしなくなるまでこれを行います:

s/\(\([^()]*)\)\)/\(\1\)/g

今いくつかのコメント:

1) sed/perl スタイルを PHP スタイルの正規表現に変換するのはあなたに任せます。

2) ( ) は特殊文字のため読みにくい。基本的には、「またはが含まれていない限り、すべて((...))を置き換えてください。正直に言うと、書き留めた混乱をテストしていませんが、このアイデアで修復できるはずです.(...)...()

これにより、常にペアで削除されます。

基本的にここでの教訓は次のとおりです。単純な正規表現ではできない質問をしました。ペアで削除するには、言語が許可するよりも多くの状態が必要です。しかし、単純な正規表現を繰り返し処理し、裏返しに double を使用する場合、これは容易に達成できます。

于 2012-06-12T15:32:20.173 に答える
1

それは簡単です。

preg_replace('~[\(\)]+~', '', $string);

編集:あなたの質問全体を読んでいません。重複ではなく、括弧が必要です。

preg_replace(array('~\(+~', '~\)+~'), array('(', ')'), $string);
于 2012-06-12T15:31:00.793 に答える
0

これを試すことができます:

preg_replace("([\\(]{1,})", "(", preg_replace("([\\)]{1,})", ")", $your_string));
于 2012-06-12T16:05:17.660 に答える
0

これを試して:

preg_replace( '/\(+(.*?)\)+/', '($1)', 'Bob Barker LIVE! (((Don\'t Miss out!)))');

デモ

于 2012-06-12T15:32:29.597 に答える
0

これは、ネストされた括弧に対しては適切に機能しませんが、正規表現で正しく処理するのは非常に困難です (エンジンによっては不可能です):

preg_replace(array('/\(+/', '/\)+/'), array('(', ')'), $text);
于 2012-06-12T15:32:46.190 に答える