2012-12-30 3 views
0

그래서 내가 이런 걸 가지고 : B (0 \정규식 주위없는 숫자 일치 숫자 범위가

[1-9] | [1-2] [0-9] | 3 0-6]) \ b

일치하는 숫자 1-36에만 잘 작동합니다. 하지만 S36과 같은 것을 얻을 수 있습니다. 일치하지 않습니다. 나는 그 숫자의 양쪽에 깨끗한 단어 경계를 가정 할 수 없다.

양쪽 모두 다른 숫자를 제외하고 1-36을 일치 시키도록하고 싶습니다.

는이 같은 일이 일 것이라고 생각하지만 그렇지 않습니다 :

(< = \의 D?) (0 [1-9] | [1-2] [0-9]? | 3 [0-6]) (? = \ D)

숫자 앞에 선행 숫자와 긍정적 인 선행 선행이 있는지 확인하기 위해 처음부터 긍정적 인 피드백이 있어야합니다. 그 뒤에 오는 것이 사실인지를 확인하기위한 번호.

올바른 방법은 무엇입니까? 엔진이 lookbehind/내다보기를 지원하지 않는 경우

+1

무엇 정규식 엔진을? Lookbehind와 Lookahead는 모든 맛에서 지원되지 않습니다. – Lucero

+0

.NET에서이 작업을 수행하고 있지만 자유 소프트웨어 인 Expresso로 테스트하고 있습니다. – lintmouse

답변

1

는, 당신은 여전히 ​​비 숫자를 포함하여 모든 것이 일치하고 관심있는 캡처를 선택할 수 있습니다.

(?:^|[^1-9])(0?[1-9]|[1-2][0-9]|3[0-6])(?:$|[^1-9]) 

귀하의 결과가 될 것이다 이 예에서 캡처 1에서 ("외부"일치는 비 캡처 그룹에 있음). 이것은 부정적인 lookaround 대신에 긍정적 인 lookaround의 사용

(?<![0-9])(?:0?[1-9]|[1-2][0-9]|3[0-6])(?![0-9]) 

: 다음 작동합니다 있도록 .NET과 함께, 당신은 lookbehind 및 내다에 대한 완벽한 지원을 할 것을

참고. 그렇지 않으면 문자가없는 곳에서 숫자가 아닌 문자가 필요하므로 일치하지 않는 문자열이 있기 때문에 문자열의 시작 또는 끝에있는 숫자는 일치하지 않습니다.

+0

좋습니다. .NET은 완벽하게 작동합니다. 감사! – lintmouse

+0

방금 ​​중괄호를 다시 추가하기 위해 작은 편집을했는데 그렇지 않은 경우 모든 경우에 작동하지 않습니다. 미안합니다. – Lucero

1

당신은 사용할 수 있습니다 [^ 0-9] 시작과 끝 부분에 다음 (초이 경우) 해당 캡처 그룹을보고 수를 얻을 :

(^|[^0-9])(0?[1-9]|[1-2][0-9]|3[0-6])($|[^0-9]) 
+0

응답 해 주셔서 감사합니다. 양측의 숫자가 일치하지 않는다는 측면에서 이것은 내가 원하는 것을 정확하게 수행하고 있습니다. 그러나 그것은 또한 비 숫자와 일치합니다. 그래서 문자열 S36에 넣으면 S36과 36이 일치합니다 ... – lintmouse

+1

@dustmouse. _ "다음 적절한 캡처 그룹 (이 경우 두 번째)을보고 번호를 얻으십시오."_. 자바 스크립트 예제 : 'S36'. replace (/ (^ | [^ 0-9]) (0? [1-9] | [1-2] [0-9] | 3 [0-6]) ($ | [^ 0-9]) /, '$ 2')'두 번째로 잡힌 그룹은'$ 2 '이므로 결과는'36'입니다. – MikeM

+0

오케이, 제 잘못. 감사. – lintmouse