복리의 역 정규식


9

Koronkorko을 위한 핀란드 단어 복리 . 우리는 문자열에 대해 복합적인 관심을 갖기를 원하지 않으므로 가능한 짧은 정규 표현식을 찾아서 제외시킵니다.

대문자 알파벳 문자 AZ로만 구성된 문자열이 제공되면 문자열에 하위 문자열이 포함되지 않은 경우 가능한 가장 짧은 정규식을 결정하십시오 KORONKORKO. KORONKORKO하위 문자열로 포함 된 문자열은 정규식과 일치하지 않아야합니다.

만 문자는 A- Z, [, ], -, ^, , ?, *, +, |, (, 및 )표현에 사용되어야한다.

나는 이것이 표현에서 118 문자로 수행 할 수 있다고 생각합니다. 더 짧게 만들 수 있습니까?

참고 :이 과제는 Ohjelmointiputka (핀란드어)에서 발생합니다.


!허용되는 문자 인 경우 ^((?!KORONKORO).)*$19 바이트를 처리 할 수 있습니다.
Mama Fun Roll

3
@MamaFunRoll 나는 그것이 허용되지 않는 이유 라고 생각합니다 !.
Alex A.

핀란드어 사이트를 돌아 다니는 재미가 있었고 입력 문자열과 일치하거나 거부하는 이론적 인 정규식이라고 생각합니다. 예를 들어, 사이트는 문자 클래스 의 사용 -^내부의 문자 클래스 만 사용할 수있는 것으로 보이며 (따라서 ^앵커로 사용할 수 없음) 전체 문자열이 정규식과 일치하는 경우에만 일치가 계산됩니다 (예 ^$: 문자열의 일부가 정규식과 일치하면 일치하는 것으로 간주하는 일반 "정규식"과 반대)
Sp3000

따라서 PHP에서도 작동해야하지만이 경우 거의 의도하지 않은 PCRE 답변을 삭제했습니다.
Sp3000

PHP ereg 함수에 의해 표현식이 유효한지 여부를 사이트에서 확인한다는 것을 잊어 버렸습니다. ohjelmointiputka.net/keskustelu/…
손님

답변:


6

204 자

(K((O(R(O(NKORO)*(NK(O(RK)?)?)?)?)?)?K)*(O(R(O(NKORO)*(N(K(O(RK?[^KO]|[^KR])|[^KO])|[^K])|[^KN])|[^KO])|[^KR])|[^KO])|[^K])*(K((O(R(O(NKORO)*(NK(O(RK)?)?)?)?)?)?K)*(O(R(O(NKORO)*(N(K(O(RK?)?)?)?)?)?)?)?)?

.*KORONKORKO.*유한 상태 머신 으로 변환하고 유한 상태 머신을 반전시킨 다음 다시 정규식으로 변환하여 생성됩니다.


이것이 왜 가장 좋은 답이 되었습니까?
Bálint

1

파이썬, 77 79 97 118 바이트

편집 3 : 재 작성 중첩 된 미리보기 사용

^([^K]|K(?=$|[^O]|O(?=$|[^R]|R(?=$|[^O]|O(?=$|[^N]|N(?=$|[^K]|K(?=$|[^O]|O(?=$|[^R]|R(?=$|[^K]|K(?=$|[^O]))))))))))*$

정규식 101

편집 2 : '$ |'추가 정규식 내내. 이제 KORONKORKO의 접두사가 일치하면 일치하는 다음 항목은 문자열 끝, 접두사를 종료하는 문자 또는 접두사를 끝내는 것이 뒤에 오는 접두사를 확장하는 문자입니다.

이 정규식은 re.fullmatch()Python 3.4에서 추가 된와 함께 작동합니다 . 와 함께 사용하기에 re.match(), ^그리고 $필요성이 더 바이트, 각각 패턴의 시작과 끝에 추가합니다.

([^K]|K($|[^O]|O($|[^R]|R($|[^O]|O($|[^N]|N($|[^K]|K($|[^O]|O($|[^R]|R($|[^K]|K($|[^O]))))))))))*

정규식 링크

이전의 잘못된 해결책 (의견 참조) :

K|([^K]|K([^O]|O([^R]|R([^O]|O([^N]|N([^K]|K([^O]|O([^R]|R([^K]|K[^O])))))))))*

편집 : 단일 K 추가


2
나는 이것이 일치한다고 믿지 않는다 K.
orlp

@orip-잘 잡습니다. 결정된.
RootTwo

최신 업데이트는 지금 실패KKORONKORKO
SP3000

고칠 수 있습니까? 어떤 아이디어?
RootTwo

1
시작 ^과 끝 $은 필요하지 않습니다. 또한, =$사용할 수 없습니다.
LegionMammal978
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.