2011-10-11 4 views
3

나는 자바로 질의를 받아들이 기위한 프로그램을 작성 중이다.대괄호 안의 공백을 제거하는 정규식은 무엇입니까?

insert into abc values(e,b); 

... 나 : 난에 그 변환하는 데 사용할 수있는 정규 무엇을 표현 ...

insert  
into 
abc  values ( e 
, b ); 

같은 쿼리가있는 경우

insert:into:abc:values(e,b); 

는 사실은 내가 원하는 대괄호 안에 공백을 제거하기 위해 정규식을 어떻게 쓸 수 있는지 알고 싶습니다.

+0

월 괄호 둥지? 그렇다면, 당신은 망쳐 버렸습니다 (Perl 마법사는 그것을 관리 할 수 ​​있습니다 만, 결과는 좋지 않거나 유지할 수 없으며 덜 정교한 regex 엔진에 이식 할 수있는 것에 대해 내기를하지 않을 것입니다). – delnan

+0

간단하게 유지하십시오. 중첩 된 대괄호가 없다. – Arslan

+0

위의 질문에 대한 답변이 이미 많으므로 문제의 해결책은 아닙니다. 그러나 이와 같은 상황에 대비해 서라도 훌륭한 테스터가 있다는 것을 알게됩니다. 온라인 - 나는 실시간이기 때문에 [이 하나] (http://regexpal.com)를 가장 많이 사용하며 오른쪽에 좋은 참조 시트가 있습니다. – j6m8

답변

12

, 다음 (단지 거기와) 괄호 안에있는 모든 공백을 제거합니다 : 그것은 작동해야

String resultString = subjectString.replaceAll("\\s+(?=[^()]*\\))", ""); 

insert  
into 
abc  values ( e 
, b ); 
변환

insert  
into 
abc  values (e,b); 

설명 :

\s+  # Match whitespace 
(?=  # only if followed by... 
[^()]* # any number of characters except parentheses 
\)  # and a closing parenthesis 
)  # End of lookahead assertion 
+0

완벽한 하나. 고마워. 나는 다시 replaceAll ("\\ s +", ":");을 사용할 것이다. 결과를 얻고 쿼리를 실행 – Arslan

0

내가보기에 RegEx가 필요하지 않습니다. 제대로 균형 잡힌 괄호를 가정하지 않고 중첩 된 괄호

yourString.replaceAll("\n", " ").replaceAll("(","(").replaceAll(")",")").replaceAll(", ",",").replaceAll(" ,",","); 
+0

그건 해결책이 아닙니다. 다음 문자열에 대해서는 작동하지 않습니다. (e, b); 여러 공백을 포함 할 수 있습니다. – Arslan

+0

첫 번째 문자열의 경우 그는 내 솔루션을 게시했습니다. 그러나 그는 그의 예제 문자열을 편집했습니다. – styrr

관련 문제