문자열에 k
개의 다른 문자가있을 때마다 정규 표현식을 일치 시키려고합니다. 즉, k=2
인 경우 aaaa
또는 a
과 일치하지만 abc
은 일치하지 않습니다. regex가 이것을 할 수 있습니까? 그렇다면 변수 k
을 일치 표현식에 전달할 수 있습니까?다른 문자 수의 정규식
1
A
답변
1
정규 표현식을 구성하고 정규 표현식에서 숫자를 대체하는 것이 아니라 정규 표현식을 구성해야합니다.
k
개 이하의 문자로 검색하는 대신 정확히 k
개 이상의 문자로 검색 할 수 있습니다. k
= 1의 경우
는 :
^(.).*?((?!\1).)
이 2 개 이상의 서로 다른 문자 (즉 엄격하게 1 개 이상의 문자)와 임의의 문자열과 일치합니다. k
= 2의
: 상기와
^(.).*?((?!\1).).*?((?!\1|\2).)
같은,이 3 개 이상의 서로 다른 문자 모든 문자열과 일치합니다.
끝 부분에 더 많은 숫자를 추가하여 을 확장 할 수 있습니다. 여기서 앞쪽 캡처 그룹에서 캡처 된 모든 문자가 네거티브 미리보기 내부의 패턴에 의해 검사됩니다.
원래의 문제로 돌아가서 ^
뒤에 패턴을 배치하면 음수 앞뒤가 일치하는 것을 부정하기 만하면됩니다. k
에 대한 예를 들어
= 2 : 패턴 위에 만 경기를 반환합니다
^(?!(.).*?((?!\1).).*?((?!\1|\2).))
(문자열
^
의 시작과 부정적인 모습 미리 이후, 빈 문자열의 제로 너비) 문자열에
k
이하의 고유 문자가있는 경우
이 방법에 대한주의 사항이 있습니다. 캡처 그룹과 역 참조의 수는 k
으로 증가하기 때문에 패턴에서 허용되는 캡처 그룹 수를 초과 할 수 있습니다.
또한 정규식은 k
일 때 비효율적이며 최악의 경우는 k
개의 별개 문자가있는 문자열입니다. 한 가지 방법은 구성을 변경하여 .*?
부분이 이전 캡처 그룹에서 캡처 된 문자 만 일치하도록 제한하는 것입니다.
^(?!(.)(?:\1)*((?!\1).)(?:\1|\2)*((?!\1|\2).))
관련 문제
- 1. 정규식 - 다른 문자
- 2. 다른 문자 앞에있는 문자 만 포함하는 정규식
- 3. 정규식 대체 정규식 문자
- 4. 정규식 문자
- 5. 정규식 문자?, $, |
- 6. 가변 수의 공백 문자가있는 정규식
- 7. 다른 문자 다음 숫자와 교체 '-'정규식 표현
- 8. 악센트 부호가있는 문자 정규식
- 9. 자바 정규식 메타 문자
- 10. 정규식 : 부정하기 문자
- 11. 특정 문자 수의 파일 읽기
- 12. 펄 정규식 임의 문자 집합에서 문자 찾기
- 13. 정규식, 특정 문자 제외
- 14. 정규식 제거 여분의 문자
- 15. 정규식 문자 조합
- 16. VB.net 정규식 문자 구문
- 17. 정규식 교류 경우 문자
- 18. 점 문자 용 정규식?
- 19. 정규식 도움말 (문자 사이)
- 20. 정규식 거부 연속 문자
- 21. 정규식 문자 제한
- 22. 정규식 문자 바꾸기
- 23. 정규식, 문자 수 제한
- 24. 정규식 : 단일 문자 바꾸기
- 25. 정규식 임의의 문자 VB.Net
- 26. VBA 정규식 문자 한도
- 27. 정규식 혼합 숫자와 문자
- 28. 정규식 제거 열 "|" 문자
- 29. 정규식 누락 문자
- 30. 파이썬 정규식 문자 클래스
_ 문자 유형이 무엇입니까? 'k' 다른 문자를 의미합니까? – Barmar
당신은 부정적인 lookaround와 함께 이것을 할 수 있을지 모르지만 나는'k'의 각 값에 대해 regexp를 맞춰야 할 것입니다. 이것은 정규 표현식보다 문자열 처리 코드로하는 것이 훨씬 쉬운 것처럼 보입니다. – Barmar
@Barmar yeah, thats what mean –