정규 표현식에 대한 간단한 질문이지만 답을 찾지 못했습니다.
숫자가 정확히 두 번 또는 네 번 순서대로 나타나는지 확인하고 싶습니다 . 어떤 구문을 사용할 수 있습니까?
\d{what goes here?}
시도 \d{2,4}
했지만이 표현식도 세 자리 숫자를 허용합니다.
정규 표현식에 대한 간단한 질문이지만 답을 찾지 못했습니다.
숫자가 정확히 두 번 또는 네 번 순서대로 나타나는지 확인하고 싶습니다 . 어떤 구문을 사용할 수 있습니까?
\d{what goes here?}
시도 \d{2,4}
했지만이 표현식도 세 자리 숫자를 허용합니다.
abc 123 xyz
무엇을 원합니까? 12
정확히 두 자리 숫자이기 때문에 일치해야합니까 ? 아니면 그 자체가 2도 4도 아닌 12
더 큰 숫자 시퀀스의 일부 이기 때문에 그렇지 않아야 123
합니까? 내가 추측해야한다면 후자의 행동을 원한다고 생각하지만 질문에서 명확하지 않습니다. 예제 및 / 또는 더 명확한 사양이 도움이 될 것입니다. 같은 질문에 abc 12345 def
... 어떻게해야합니까?
답변:
이에 대한 구체적인 구문은 없지만이를 수행하는 방법에는 여러 가지가 있습니다.
(?:\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
\d{2}(?:\d{2})?
방망이에서 바로 해결책을 생각 했습니다.-이것들의 좋은 다양성-특히 마지막 것은 매우 훌륭하고 확장 가능해 보입니다.
(?:
이것 의 사용을 이해하지 못한 사람 은 "non-capturing group"(replace 문에서 참조되지 않는 그룹)을 시작합니다. 괄호 만 사용할 수도 있지만 캡처 그룹이 생성됩니다. 자세한 내용은 다음을 참조하세요. stackoverflow.com/questions/3512471/non-capturing-group
"333"
. "전체 문자열이 일치하는지 확인"기능이 아닌 실수로 정규식 라이브러리의 "일치하는 부분 문자열 찾기"기능을 사용하고있을 수 있습니다. 문서를 참조해야합니다.
(?<!\d)(\d{2}|\d{4})(?!\d)
이것이 올바른 방법입니다. 받아 들여진 대답은 틀렸다.
3 자리 (또는 5)와 일치합니다. 그래서 그것은 내 눈에 잘못된 것입니다 .
1) 연속 된 2, 4 자리 또는 연속 된 2-4 자리 뒤에 숫자가 없는지 확인합니다.
(<!)
구문은 부정적인 lookbehind입니다.
(?!)
구문은 부정적 예측입니다.
위의 내용은 중간 문자열에서 작동합니다.
검색 문자열이 주위에 내용이없는 경우에는 사용할 수 ^
와 $
시작 및 문자열 앵커의 끝 :
^\d{4}$|^\d{2}$
(?<!\d)(\d{2}|\d{4})(?!\d)
^\d{4}$|^\d{2}$
그것을 고칠 수있는 잠재적 인 방법이 될 것입니다. 그랬듯이^\d{2}(?!\d)|^\d{4}(?!\d)