2009-03-11 6 views
0

제가 작업중인 프로젝트에서 다음 정규 표현식을 생성했으나 제대로 작동하지만 호기심이 궁금합니다. "압축/축소"할 수있는 경우 :도움말 반복되는 서브 패턴을 사용하여 정규식 단축하기

/[(]PRD[)].+;.+;.*;.+;.+;.*;.*;.*;/ 

정규 표현식에 항상

+0

찾고있는 정확한 패턴은 무엇입니까? 예 : 경기 결과 집합은 어떻게 생겼습니까? –

+0

그래, 문제가 "이 정규식과 정확히 일치하는 항목"이라면 압축하기가 어렵습니다. John 's는 좀 더 우아한 접근법에 능숙했습니다. 일치하는 콘텐츠의 일부 샘플은 많은 도움이됩니다. – danieltalsky

답변

3

우선, 단일 문자 블록 그냥 멀리 갈 수 ... 나에게 부두처럼 보였다있다 :

/\(PRD\).+;.+;.*;.+;.+;.*;.*;.*;/ 

다음, Y ou는 관련 항목을 함께 그룹화 할 수 있습니다.

/\(PRD\)(.+;){2}.*;(.+;){2}(.*;){3}/ 

실제로 텍스트를 길게 만듭니다.

+0

예, 길지만 50 % 이상 우수합니다. ; P – Ash

+0

그리고 '.' 매회 '[^;]가되어야합니다. 그러면 수정 된 원본보다 15 자 짧은 등 재 작성이 훨씬 더 짧아집니다. –

+0

원본에 캡처가 없으므로 '(...)'시퀀스가 '(? : ...)'(캡처되지 않은 그룹)이어야한다는 인수가있을 수도 있습니다. 원작이 그룹화를 원한다는 또 다른 주장이 있지만 ';'로 나눌수록 더 좋은지 아닌지에 대한 질문이있을 것입니다. –

2
/\(PRD\).+;.+;.*;.+;.+;(.*;){3}/ 

나는 많은 이득을 얻고 똑같은 규칙에 도달 할 것이라고 생각하지 않습니다. 당신이 모든 텍스트를 ";" 선택, 당신은 할 수 :

/\(PRD\)(.*;){8}/ 
3
/\(PRD\)(.+;.+;.*;){2}(.*;){2}/ 

는보다 짧은

/\(PRD\)((.+;){2}.*;){2}(.*;){2}/ 

하지만 틀림없이 덜 굉장합니다. 둘 다 성공적으로 (문자 클래스 변경으로 인하여 만)

/[(]PRD[)].+;.+;.*;.+;.+;.*;.*;.*;/ 

보다 짧습니다.

또는 당신도 같은 규칙을 얻을 수있는 가장 짧은 될 수있는

/\(PRD\)(.+;.+;.*;){2}.*;.*;/ 

로 갈 수있다.

+0

+1 같은 규칙을 가진 가장 짧은 - 이제 규칙을 조금 구부리면 ... :) – eglasius