2011-11-08 4 views
0

나는이 모양이 텍스트가 : 나는 executeRule에 대한 매개 변수를 얻기 위해 정규 표현식으로 구문 분석 할 필요가자바 정규 표현식 토론

executeRule(document, 'SendEmail', [ 
    'emailAddress':'EMAIL([email protected])', 
    'subject':'Test', 
    'text':'Test', 
    'defaultText':'Test'] 
); 

합니다.

현재 내 정규 표현식이 (자바)과 같습니다

List<String> partialRules = new ArrayList<String>(); 
     List<String> rules = new ArrayList<String>(); 
     Pattern p = Pattern.compile("executeRule\\(\\s*\\w+,\\s*'(\\w+)'\\s*,\\.*"); 

문제는 내가 executeRule 방법의 내 3'rd 매개 변수와 일치하는 정규 표현식을 찾을 수 있습니다.

도움을 주시면 감사하겠습니다.

감사합니다.

답변

1
Pattern p = Pattern.compile("(?s)executeRule\\(\\s*?(.+?),\\s*?('.+?'),\\s*(\\[.+?\\])"); 

나는 당신이 원하는 것을 이해합니다. 각 인수는 Matcher 그룹 (i)에 저장됩니다.

+0

세 번째 인수에 쉼표를 사용할 수 없으므로 쉼표로 구분 기호를 사용할 수 없습니다. – Zernike

+0

고마워요 – Sergiu

+0

어떻게 끝까지 캡처 할 수 있습니까? 지금까지는 최종을 제외하고 전체 방법과 일치합니다 ... 고맙습니다. – Sergiu

5

위의 모든 것을 수행하기 위해 하나의 정규 표현식을 사용하지 않고 쉼표로 분리 할 간단한 구문 분석기를 작성한 다음 다른 구문 분석기를 위임하여 각 콜론으로 구분 된 쌍을 구문 분석 했습니까? 물론 (각 텍스트 문자열 내에서 쉼표를 사용할 수 있는지 여부에 따라) 생성/디버그하는 것이 더 쉬울 수도 있습니다.

위의 구문을 확장하도록 선택하면이 구문은 확장 성이 뛰어난 정규식 (정규 표현식) 일 가능성이 있습니다.

+0

물론입니다! 정확히 x 개의 인수가 있고 쉼표로 구분되고 인수에 쉼표가 없어야한다는 것을 알기 때문에이 함수는 지나치게 복잡한 정규 표현식이 아니라 정말 멋진 솔루션처럼 보입니다. –

+0

executeRule 메서드는 내 텍스트에서 두 번 이상 나타날 수 있으며 이러한 executeRule 메서드 간에는 관련이없는 텍스트가있을 수 있습니다 (예 : 텍스트 텍스트 executeRule (X, Y, Z); 텍스트 텍스트 executeRule (X, Y, Z)) – Sergiu

+0

내 fav 인용문 중 하나 - 문제가 발생했을 때 "정규식을 사용할 것입니다."라고 생각하는 사람들이 있습니다. 이제는 두 가지 문제가 있습니다. – Dapeng