숫자를 두 번 또는 네 번 일치시키는 정규식


95

정규 표현식에 대한 간단한 질문이지만 답을 찾지 못했습니다.

숫자가 정확히 번 또는 번 순서대로 나타나는지 확인하고 싶습니다 . 어떤 구문을 사용할 수 있습니까?

\d{what goes here?}

시도 \d{2,4}했지만이 표현식도 세 자리 숫자를 허용합니다.


1
예를 들어 2 자리 또는 4 자리 연도 와 일치합니다 .
DavidRR

if 문자열은 abc 123 xyz무엇을 원합니까? 12정확히 두 자리 숫자이기 때문에 일치해야합니까 ? 아니면 그 자체가 2도 4도 아닌 12더 큰 숫자 시퀀스의 일부 이기 때문에 그렇지 않아야 123합니까? 내가 추측해야한다면 후자의 행동을 원한다고 생각하지만 질문에서 명확하지 않습니다. 예제 및 / 또는 더 명확한 사양이 도움이 될 것입니다. 같은 질문에 abc 12345 def... 어떻게해야합니까?
Jean-François Corbett

답변:


146

이에 대한 구체적인 구문은 없지만이를 수행하는 방법에는 여러 가지가 있습니다.

(?:\d{4}|\d{2})    <-- alternation: four digits or two
\d{2}(?:\d{2})?    <-- two digits, and optionally two more
(?:\d{2}){1,2}     <-- two digits, times one or two

1
개인적으로, \d{2}(?:\d{2})?방망이에서 바로 해결책을 생각 했습니다.-이것들의 좋은 다양성-특히 마지막 것은 매우 훌륭하고 확장 가능해 보입니다.
Nightfirecat 2011

3
+1은 4 자리 숫자를 먼저 일치시킨 다음 2 자리 숫자를 번갈아 사용할 때 필요한 순서를 염두에 둡니다. 다른 변형을 제공하는 것도 좋습니다.
Ahmad Mageed

9
저와 같이 (?:이것 의 사용을 이해하지 못한 사람 은 "non-capturing group"(replace 문에서 참조되지 않는 그룹)을 시작합니다. 괄호 만 사용할 수도 있지만 캡처 그룹이 생성됩니다. 자세한 내용은 다음을 참조하세요. stackoverflow.com/questions/3512471/non-capturing-group
Jeremy Moritz

이 중 하나를 "333"과 "33"에 대해 동일한 결과를 보여줍니다

1
@Dan :이 정규식은 전체 문자열과 일치 하지 않습니다"333" . "전체 문자열이 일치하는지 확인"기능이 아닌 실수로 정규식 라이브러리의 "일치하는 부분 문자열 찾기"기능을 사용하고있을 수 있습니다. 문서를 참조해야합니다.
ruakh

3
(?<!\d)(\d{2}|\d{4})(?!\d)

이것이 올바른 방법입니다. 받아 들여진 대답은 틀렸다.

3 자리 (또는 5)와 일치합니다. 그래서 그것은 내 눈에 잘못된 것입니다 .

1) 연속 된 2, 4 자리 또는 연속 된 2-4 자리 뒤에 숫자가 없는지 확인합니다.

  • (<!) 구문은 부정적인 lookbehind입니다.

  • (?!) 구문은 부정적 예측입니다.

위의 내용은 중간 문자열에서 작동합니다.

검색 문자열이 주위에 내용이없는 경우에는 사용할 수 ^$시작 및 문자열 앵커의 끝 :

^\d{4}$|^\d{2}$

1
나는 받아 들여진 대답 이 틀렸다고 말하지 않을 것이다. 나는 그 질문 이 불분명하며 그 대답은 그것에 대한 하나의 유효한 해석을 다루고 있다고 말할 것입니다. 귀하의 답변은 또 다른 유효한 해석을 다루고 있습니다 (나는 아마도 더 가능성이 있다고 생각하지만 질문자는 그렇지 않았습니다 ...).
Jean-François Corbett

2
"3 자리 숫자와 일치합니다"는 정확하지 않습니다. "3 자리 시퀀스의 2 자리 하위 시퀀스와 일치 할 것"이라는 뜻이라고 생각합니다.
Jean-François Corbett

1
또한 귀하의 답변 은 5 자리 이상의 숫자 시퀀스에서 의도 한대로 작동하지 않습니다 . 나는 정규식 전문가는 아니지만 그것을 고치는 한 가지 방법 은 두 경우 모두에 부정적 예측 / 비하인드를 적용하는 것입니다 (2 및 4 자리 시퀀스).(?<!\d)(\d{2}|\d{4})(?!\d)
Jean-François Corbett

5 자리 숫자가 맞다고 생각합니다. 수정 해 주셔서 감사합니다. 그것을 고칠 것입니다.
JGFMK

^\d{4}$|^\d{2}$그것을 고칠 수있는 잠재적 인 방법이 될 것입니다. 그랬듯이^\d{2}(?!\d)|^\d{4}(?!\d)
JGFMK
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.