2014-06-17 3 views
0

enter code here "."다음에 포트에 연결할 수있는 번호를 식별하려고합니다.
포트의 형식은 ge-#/#/#입니다 (0 < = n < = 23 또는 ge-0/1/m 인 경우 ge-0/0/n 일 수 있음) < = m < = 3)VBA regex look ahead

예 :

ge-0/0/10.2014 

이 결과는해야 현재 "2014"

, 나는 포트를 식별하기 위해 다음과 같은 정규식을 사용하고 있습니다 :

\bge-0/(0/([01]?[0-9]|2[0-3])|1/[0-3])\b 

제 문제는 포트에 대한 검사를 작성하는 것이지만 그 뒤에있는 것을 인쇄하는 것입니다. 포트 코드를 간단히 시작한 다음 포트 코드를 던지려는 시도는 좋지 않습니다. 누구든지 RegEx를 만들면 인쇄하지 않고 포트를 확인하는 방법을 찾고 설명 할 수 있습니다. 매우 감사하게 생각합니다.

감사

편집 :
만 패턴이 문제를 해결하기 위해 변경 될 수 있습니다. 이것은 패턴이 vba 매크로에 의해 읽혀질 txt 파일에 저장되기 때문입니다. vba 코드는 수정할 수 없습니다.

+0

"vba"및 "nsregularexpression"질문에 태그를 지정했습니다. 하나는 마이크로 소프트이고 다른 하나는 애플이다. 그 맞습니까? 그리고 왜'ge' 다음에 정규식에서 대시가 올 것이고, 모든 예제에서 슬래시가 올까요? –

+0

그 점을 지적 해 주셔서 감사 드리며, NS를 보지 못했습니다. VBA를 사용하고 있습니다. "ge /"는 오타였으며, "ge-"이어야합니다. 감사합니다 – Alter

답변

1

는 추가 번호 \.([0-9]+)에 대한 캡처 서브 패턴으로 정규 표현식을 확장 :

Dim regEx As New VBScript_RegExp_55.RegExp 
regEx.Pattern = "\bge-0/(0/([01]?[0-9]|2[0-3])|1/[0-3])\.([0-9]+)\b" 

사용 SubMatches 서브 패턴을 검색 할; 정규 표현식에는 앞의 두 쌍의 괄호가 있으므로 색인 2를 참조하십시오.

Dim source, matches, result 
Set source = "ge-0/0/10.2014" 
If regEx.test(source) Then 
    Set matches = regEx.Execute(source) 
    Set result = matches(0).SubMatches(2) 
End If 
+0

불행히도 해결 방법은 패턴/RegEx 문자열을 수정해야합니다. 그렇지 않으면 해결했을 것입니다. – Alter

+0

정확한 제한점을 설명하고 설명하십시오. 정규식으로 무엇을 _can_ 할 수 있습니까? 하위 패턴을 캡처하거나 전체 패턴과 일치하는 문자열에만 액세스 할 수 있습니까? RegExp의 Execute 및 Replace 메소드를 사용할 수 있습니까? 나중에 경기에서 문자열 조작을 할 수 있습니까? –

+0

원본 게시물을 업데이트했습니다. 마지막에 "수정"섹션에 제한 사항에 대한 추가 정보가 있습니다. – Alter

관련 문제