2013-06-20 2 views
1

정규 표현식을 사용하여 문자열을 구문 분석해야합니다.정규 표현식 OR 표현식 (|)을 사용하는 VBScript

대부분의 시간은, 문자열은 식 표현이 자신 중 하나를 표현하고자하여

^([a-zA-Z\-\,0-9\(\)\#\/ \.]{1,25})(.{0,9})(.{0,9})(.{0,9})(.{0,9})(.{0,9})(.{0,9}) 

될 것이라고 있도록

^([a-zA-Z\-\,0-9\(\)\#\/ \.]{1,21})(.{0,9})(.{0,9})(.{0,9})(.{0,9})(.{0,9})(.{0,9}) 

때때로, 문자열이 추가로 4 개 문자를 포함 할 필요가

를 사용하여 구문 분석 할 수 각각의 문자열에서 작업하십시오. 첫 번째 표현식은 두 번째 표현식을 의도 한 문자열에서도 기술적으로 유효하지만 표현식의. {0,9} 섹션은 4자를 벗어납니다.

 
A quick explanation of the expression: 
Subset 1: 1 - 21 (or 25 characters) 
any characters a-z 
any characters A-Z 
the dash, the comma 
any digits 0-9 
the open and close parenthesis, the hash tag, forward slash, space and period. 

Subsets 2-7 
Any characters (up to 9 total) 

내가

^([a-zA-Z\-\,0-9\(\)\#\/ \.]{1,21|25})(.{0,9})(.{0,9})(.{0,9})(.{0,9})(.{0,9})(.{0,9}) 

또는

^([a-zA-Z\-\,0-9\(\)\#\/ \.]{1,21}|{1,25})(.{0,9})(.{0,9})(.{0,9})(.{0,9})(.{0,9})(.{0,9}) 

나는이 시도하고 작동하지 않았다 아래의 표현 같은 것을 기대했다. 다른 사람이라도 아이디어가 있으십니까?

답변

1

그것은 오히려 자세한하지만 난 당신이해야 할 거라고 생각 :

^([a-zA-Z\-\,0-9\(\)\#\/ \.]{1,21}|[a-zA-Z\-\,0-9\(\)\#\/ \.]{25})(.{0,9})(.{0,9})(.{0,9})(.{0,9})(.{0,9})(.{0,9}) 

첫 번째 캡처 그룹 중 1-21 자 또는 25 자 여야합니다.

당신이 당신의 그룹이 캡처 (당신의 정규식 엔진에서 지원하는 경우), 당신이 할 수있을 방법을 변경하고자하는 경우 :

^([a-zA-Z\-\,0-9\(\)\#\/ \.]{1,21}|[a-zA-Z\-\,0-9\(\)\#\/ \.]{25})(.{0,9}){6} 
+0

또는 1의 그룹에서 분할 21 자 및 4 자의 선택적인 그룹 :^([a-zA-Z \ - \, 0-9 \ (\) \ # \/\.] {1,21} ([a-zA- 마지막 4 문자가있는 두 번째 캡처 그룹을 사용하는 대신에 (.0-9 \ (\) \ # \/\.] {4})?) (. {0,9}) {6} 응용할 수 있는. – AutomatedChaos

+0

@AutomatedChaos 이는 22-24 자의 그룹과도 일치합니다. 그것은 OP와 맞지 않는'... {1,25}'과 같습니다. 사실 실제 문제는 패턴이 제대로 정의되어 있지 않다는 것입니다. (마지막 0 - 54 문자를 6 개의 그룹으로 나누는 방법을 어떻게 알 수 있습니까?) 그러나 추가 정보없이 이것이 최선의 대답입니다. –

+0

네, 맞습니다. 첫 번째는 19 개의 긴 문자열과 일치 할 수 있고 두 번째는 4 개의 긴 문자열로 길이가 23 인 문자열과 일치 할 수 있습니다. 이 질문을 볼 때 모든 문제가 정규 표현식으로 해결하기에 적합하지는 않습니다. – AutomatedChaos