文字列内の不要な/余分な括弧が見つかった場合に削除できる正規表現が必要です。
例:
Bob Barker LIVE! (((Don't Miss out!)))
望んでいた結果:
Bob Barker LIVE! (Don't Miss out!)
ユーザーがそれらを使いすぎない限り、ユーザーがそれらを使用してもかまいません。また、それらを閉じてください。
フィードバックをお寄せいただきありがとうございます。
文字列内の不要な/余分な括弧が見つかった場合に削除できる正規表現が必要です。
例:
Bob Barker LIVE! (((Don't Miss out!)))
望んでいた結果:
Bob Barker LIVE! (Don't Miss out!)
ユーザーがそれらを使いすぎない限り、ユーザーがそれらを使用してもかまいません。また、それらを閉じてください。
フィードバックをお寄せいただきありがとうございます。
これは、正規表現 + 再帰を使用して効果的に行うことができます。何もしなくなるまでこれを行います:
s/\(\([^()]*)\)\)/\(\1\)/g
今いくつかのコメント:
1) sed/perl スタイルを PHP スタイルの正規表現に変換するのはあなたに任せます。
2) ( ) は特殊文字のため読みにくい。基本的には、「またはが含まれていない限り、すべて((...))
を置き換えてください。正直に言うと、書き留めた混乱をテストしていませんが、このアイデアで修復できるはずです.(...)
...
(
)
これにより、常にペアで削除されます。
基本的にここでの教訓は次のとおりです。単純な正規表現ではできない質問をしました。ペアで削除するには、言語が許可するよりも多くの状態が必要です。しかし、単純な正規表現を繰り返し処理し、裏返しに double を使用する場合、これは容易に達成できます。
それは簡単です。
preg_replace('~[\(\)]+~', '', $string);
編集:あなたの質問全体を読んでいません。重複ではなく、括弧が必要です。
preg_replace(array('~\(+~', '~\)+~'), array('(', ')'), $string);
これを試すことができます:
preg_replace("([\\(]{1,})", "(", preg_replace("([\\)]{1,})", ")", $your_string));
これは、ネストされた括弧に対しては適切に機能しませんが、正規表現で正しく処理するのは非常に困難です (エンジンによっては不可能です):
preg_replace(array('/\(+/', '/\)+/'), array('(', ')'), $text);