2011-01-09 5 views
1

하나의 숫자 값이 다른 값보다 큰지 검사하는 regexp가 필요합니다. 필자와 매우 비슷하게 작성합니다. (if 10>8) ...정규식 : 숫자가 더 큰 경우 일치 ...?

분명히 내 스 니펫이 발생하지 않을 것이고 정규 표현식을 직접 경험할 수있는 경험이 부족합니다. 이것이 정규식과 관련이 있습니까?

^[1-9]+[0-9]+$ 

감사합니다.

+3

정규 표현식으로 왜 그렇게하고 싶습니까? –

+0

처리해야 할 데이터에 대해 자세히 설명해 주시겠습니까? – Ikke

+0

하나의 숫자가 일정하다면, 그럴 수도 있습니다 (추악하지만!). 둘 다 가변적이라면, 불가능하다는 것을 말하면서 @ sepp2k가 옳은 것 같습니다. – marcog

답변

3

정확하게 문제를 이해하는 경우 두 번째 숫자가 첫 번째 숫자보다 큰 임의의 길이의 두 연속 숫자와 일치하는 정규식을 원합니다. 이것은 regexen으로 할 수 없습니다. 분명히 정규 언어가 아니며 일반적인 확장 (역 참조, 재귀 참조)이이를 변경하기에 충분하지 않습니다.

일부 정규식 구현 (예 : perl)에서는 호스트 언어의 코드를 정규 표현식에 포함시킬 수 있습니다. 이 경우 물론 술어 num1 < num2을 perl 코드로 포함시킬 수는 있지만 정규 표현식으로 간주하지는 않습니다.

7

이것은 정규 표현식이 풀어야 할 좋은 문제가 아닙니다. 숫자를 추출하고 수치로 비교하십시오.

+0

불행히도, 비교할 수있는 것이 없기 때문에 나는 할 수 없습니다. – Industrial

+4

그러면 문제에 대해 더 알려줘야 할 것입니다. 데이터 샘플, 사용중인 프로그래밍 언어 또는 도구 등. –

1

글쎄, 제대로 이해했다면 .htaccess 또는 이와 비슷한 숫자를 비교해야합니다. 어리 석고 unhealty 비교를 수행하고 평가 된 문자열에 숫자가 필요합니다. "5 [12-9]를 비교하면"^ [0-9] [1-9] [0-9] $ "가 일치합니다. "당신이 5임을 이해할 수 있도록 같은 길이 미만 12

비교 수는 100

당신이 당신의 컨텍스트 (iMacros 제작 인 더 설명 할 수 있다면 내가 생각에서 숫자 만 미친하지 않습니다. htaccess ...) 누군가가 이것을 할 수있는 더 좋은 방법을 제안 할 수 있습니다.

0

정규식으로 직접 처리 한 것은 아닙니다. 프로그래밍중인 언어로 인해 regexp 구문을 확장하여 임의의 코드를 연결할 수 있습니다. 펄의 예를 들면 다음과 같습니다

$_ = '54 55'; 
say 'matched' if /\A(\d\d) (\d\d)(?(?{$1 >= $2})(*FAIL))\z/; 

이 성공하지만 56 55하지 않습니다. https://stackoverflow.com/a/30936388/626804에서 나는 조금 더 설명한다.

좋은 취향인지 좋은 생각인지는 다른 문제입니다.하지만 Perl에서는 이러한 유형의 비교를 원하는 경우 '정규 표현식'과 일치시킬 수 있습니다.