일치하는 한정된 수의 주어진 정규식에 모든 일치 집합을 찾는 방법을 알고 싶습니다.주어진 정규식에 대한 모든 가능한 일치 집합을 만듭니다
이이 예를 들어 모든 당신이 수를 검색하는 방법이 있다면 나 또한 관심이있을 것 그들이 ^
시작 가정 $
`hello?` -> (hell, hello)
`[1-9][0-9]{0,3}` -> (1,2,3 ..., 9998, 9999)
`My (cat|dog) is awesome!` -> (My cat is awesome!, My dog is awesome!)
`1{1,10}` -> (1,11, ..., 111111111, 1111111111)
`1*` -> //error
`1+` -> //error
`(1|11){2}` -> (1,11,111,1111) //notice how it doesn't repeat any of the possibilities
으로 종료 할 수 있습니다 예를 들어
regex에 고유 한 솔루션이 있는지 또는 정규식에 유한 솔루션이 있는지를 판단 할 수있는 방법이 있는지를 확인하십시오.
알고리즘이 모든 정규식을 구문 분석 할 수 있으면 좋겠지 만 정규식의 강력한 하위 집합은 좋을 것입니다.
이 문제에 대한 PHP 솔루션에 관심이 있습니다. 그러나 다른 언어들도 문제가되지 않습니다.
편집 :
내가 정규식 (및 기타 일반 언어)를 구현하는 데 사용할 수 있습니다 DFA에 대한 내 공식 이론 수업 시간에 배운. 내가 정규 표현식을 DFA로 변환 할 수 있다면 솔직하게 나에게 솔직하게 보인다. 그러나 그 변환은 나에게 다소 까다로운 것처럼 보인다.
편집 2 : 모든 제안
감사합니다, 나는 "대답"이 질문에 일하고 있어요 see my post about the public github project.
큰 질문입니다. 이 일을 할 수있는 무언가가 단위 테스트에 매우 유용 할 것이라고 나는 상상한다. – FtDRbwLXw6
@drrcknlsn 그건 내 생각 중 하나 였고, MVC를위한 정규식 기반 라우팅 시스템을위한 완벽한 캐시를 생성하는 데이를 사용하려고 생각했습니다. –
암시 적 앵커를 가정합니다. 주어진 문자열을 일치시키는 모든 가능한 방법을 쉽게 표시 할 수 있습니다. 예를 들어 "Hello world"라고하면'/ hello? o/i' 패턴은 Hello, Hell, Hel와 일치합니다. 그것은 세대와 같지 않습니다. – tchrist