2012-10-09 3 views
4

Java에서 증분 정규 표현식 일치를 허용하는 효율적인 라이브러리가 있습니까?Java에서 증분 패턴 (RegEx)이 일치합니까?

내가 의미하는 바는 한 번에 몇 바이트를 보낼 수있는 OutputStream을 가지고 싶습니다. 그러면 정규식과 비교하여 지금까지 데이터를 일치시키는 것을 추적 할 수 있습니다. 이 정규 표현식이 이 아닌이 일치하는 바이트가 수신되면 스트림이 나에게 알려주기를 바랍니다. 그렇지 않으면 현재 최선의 일치가있는 경우 알려 주어야합니다.

어쨌든 스트림이 닫힐 때까지 전체 표현식이나 그 일부를 일치시킬 수 있거나 결정을 내릴 수없는 정규 표현식을 상상할 수 있기 때문에 이것이 매우 어렵고 잘 정의되지 않은 문제 일 수 있습니다. . * 같은 사소한 것조차도 H, He, Hel, Hell, Hello 등과 일치 할 수 있습니다. 그런 경우에, 나는이 물줄기에 "네,이 표현은 지금 끝났 으면 일치 할 수 있고, 돌아 오는 그룹은 여기에 있습니다."라고 말하고 싶습니다.

그러나 Pattern이 내부적으로 문자열을 따라 문자 단위로 일치하면 너무 어렵지 않을 수 있습니다.

+0

실제로, 역 추적은 정규 표현식 평가에서 표준입니다. 이것이 잘못 정의 된 당신의 직감은 절대적으로 스포트 온이다. –

+0

@MarkoTopolnik 나는 백 트랙킹을 사용할 수 있고 여전히 순서대로 문자를 처리 할 수 ​​있다고 생각한다. 또는 정규 표현식 엔진이 문자열에서 "무작위"look-aheads를 수행하기 위해 점프합니까? –

+0

미리보기는 실제로 아무것도 일치시키지 않고 전체 입력 시퀀스를 검사해야 할 수도 있습니다. –

답변

1

증분 매칭 근사 정규 표현식에 대응 유한 상태 오토 마톤을 계산하고, 입력 된 문자를 처리하는 동안 그 상태를 전환을 수행함으로써 달성 될 수있다. 대부분의 렉서가이 방법으로 작동합니다. 그러나이 방법은 그룹에 대해서는 잘 작동하지 않습니다.

아마도 두 부분을 만들 수 있습니다. 일치하는 항목이 있는지 또는 나중에 일치 할 가능성이 있는지를 판단하는 일치 항목 하나를 작성하십시오. 이를 사용하여 모든 입력 문자 다음에 빠른 답장을 줄 수 있습니다. 전체 일치 항목을 찾으면 정규식 엔진을 역 추적하고 그룹화하여 일치하는 그룹을 식별 할 수 있습니다. 어떤 경우에는 그룹화 항목을 오토 마톤으로 인코딩하는 것이 가능할 수도 있지만이를 수행하는 일반적인 방법은 생각할 수 없습니다.

+0

FSM은 현대식 정규 표현식 언어의 기본 하위 집합만을 모델링합니다. –

+0

내 경우에는 위와 같이 훌륭하게 작동해야하며 약간의 작업이 필요합니다. 어딘가에 숨어있는 기능이 있기를 바랬습니다. 그러나 나는 당신이 그것을 완전히 이해할 수 있도록 뭔가를 구현하는 것이 결코 아프지 않을 것이라고 생각합니다. –