소개
나는 여기에 많은 정규 표현식 문제를 보지 못하기 때문에 많은 정규 표현식을 사용하여 여러 가지 방법으로 수행 할 수있는 믿을 수 없을 정도로 간단한 것을 제안하고 싶습니다. 나는 그것이 정규식 애호가들에게 약간의 재미있는 골프 시간을 제공하기를 바랍니다.
도전
문제는 내가 "느슨한"시리즈라고 불렀던 것, 즉 동일한 수의 다른 캐릭터를 일치시키는 것입니다. 이것은 예제와 함께 가장 잘 설명됩니다.
시합:
aaabbbccc
xyz
iillppddff
ggggggoooooollllllffffff
abc
banana
일치하지 않습니다 :
aabc
xxxyyzzz
iilllpppddff
ggggggoooooollllllfff
aaaaaabbbccc
aaabbbc
abbaa
aabbbc
일반화하기 위해, 우리는 (형식의 제목을 일치시킬 문자의 목록 을 경우, 모든c1)n(c2)n(c3)n...(ck)n
c1
ck
ci != ci+1
i, k > 1, and n > 0.
설명 :
입력이 비어 있지 않습니다.
문자열에서 나중에 문자가 반복 될 수 있습니다 (예 : "banana")
k > 1
따라서 문자열에는 항상 최소 2 개의 다른 문자가 있습니다.ASCII 문자 만 입력으로 전달되고 문자는 줄 종결자가 아니라고 가정 할 수 있습니다.
규칙
(이 훌륭한 규칙 블록에 대해 Martin Ender에게 감사합니다)
답은 추가 코드없이 단일 정규식으로 구성되어야합니다 (선택적으로 솔루션 작동에 필요한 정규식 수정 자 목록 제외). 호스팅 언어로 코드를 호출 할 수있는 언어 정규식 기능 (예 : Perl e
수정 자)을 사용해서는 안됩니다 .
이 도전 전에 존재했던 정규식 풍미를 사용할 수 있지만, 풍미를 지정하십시오.
정규식이 암시 적으로 고정되어 있다고 가정하지 마십시오. 예를 들어 Python을 사용하는 경우 정규식이 re.match가 아닌 re.search와 함께 사용된다고 가정하십시오. 정규 표현식은 유효한 평등주의 문자열의 경우 전체 문자열과 일치해야하며 유효하지 않은 문자열과 일치하지 않아야합니다. 원하는만큼 캡처 그룹을 사용할 수 있습니다.
입력은 항상 줄 종결자를 포함하지 않는 두 개 이상의 ASCII 문자로 구성된 문자열이라고 가정 할 수 있습니다.
이것은 정규식 골프이므로 바이트 단위의 가장 짧은 정규식이 이깁니다. 언어에서 /.../
정규식을 나타 내기 위해 분리 문자 (일반적으로 )가 필요한 경우 분리 문자 자체를 계산하지 마십시오. 솔루션에 수정자가 필요한 경우 수정 자당 1 바이트를 추가하십시오.
기준
이것은 좋은 ol'fashioned 골프이므로 효율성을 잊고 정규식을 가능한 한 작게 만드십시오.
사용한 정규 표현식의 풍미를 언급하고 가능한 경우 실제 표현 표현의 온라인 데모를 보여주는 링크를 포함하십시오.
banana
.