2012-06-12 4 views
-1

문자열에서 불필요한/여분의 괄호를 제거 할 수있는 정규 표현식이 필요합니다.

예 :여러 괄호를 제거하는 정규식

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

구인 결과 :

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

나는만큼 그들을 이상하지 않는 사용으로, 만약 사용자가 당신을 걱정하고, 그것들을 닫아야하지 않습니다 .

의견을 보내 주셔서 감사합니다.

+3

T 대체 규칙은 무엇입니까? 짝짓기 괄호 또는 연속되는 개폐식 붕괴 - 아직 시도해 봤어? – mario

+2

'((fo (o)) (bar))'와'(((foo)'? – Qtax

답변

1

충분히 쉽습니다.

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

편집 : 전체 질문을 읽지 못했습니다. 당신은 여전히 ​​괄호를 원하지만 중복되지는 않습니다.

preg_replace(array('~\(+~', '~\)+~'), array('(', ')'), $string); 
+0

모든 괄호가 제거 된 것 같습니다. – Esailija

+0

입력이 "Bob Barker LIVE! ("(Do not Miss!)) ("Bob Barker LIVE! (Do not Miss!) ("마지막"("은 닫히지 않아 제거해야합니다. – socca1157

+0

@ socca1157 OP – Esailija

2

이 작업은 regex + recursion을 사용하면 효과적으로 수행 할 수 있습니다. 그것은 아무것도 멈출 때까지이 작업을 수행 :

이제

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

일부 의견 :

1) 나는 PHP 스타일의 정규식에 나오지도/펄 스타일을 변환하는 당신에게 그것을 떠날거야.

2)()는 특수 문자이므로 읽기가 어렵습니다. 기본적으로 "((...))(...)으로 바꾸고 ( 또는 )을 포함하지 않는 한 으로 바꾸십시오. 솔직히 말해서 필자가 적어 놓은 테스트를 테스트하지는 않았지만이 아이디어를 사용하여 복구 할 수 있어야합니다. .

이 항상 여기에 쌍으로 기본적으로 도덕적

그들을 제거이다. 당신은 간단한 정규식으로 할 수없는 질문을 물어 - 쌍으로 제거하는 것은 언어 허용하는 것보다 더 상태를 요구를하지만 이것이다 간단한 정규 표현식을 반복하고 안쪽에서 복식을 먹으면 낮은 매달린 과일

0

시험해보기 :

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

이 중첩 된 괄호 제대로 작동하지 않습니다 Demo

0

,하지만 의 정말 어려운 정규식 (심지어 불가능 엔진에 따라 다름)로 바로 얻을 :

preg_replace(array('/\(+/', '/\)+/'), array('(', ')'), $text); 
0

시도해 볼 수 있습니다 :

preg_replace("([\\(]{1,})", "(", preg_replace("([\\)]{1,})", ")", $your_string)); 
관련 문제