2011-11-21 5 views
0

주어진 정규 표현식과 일치하도록 문자열을 몇 자로 확장 할 수 있는지 확인하는 방법이 있습니까? Regex 클래스를 사용하여이를 수행 할 수 있습니까? ... 나는 잠시 동안 인터넷 검색했고 난 내 자신의 정규식 파서를 작성해야처럼 보인다 알렉스처럼 정규식 부분 일치

는 말했다 : 패턴이 abc 경우 문자열 ab 내 기준 및 문자열 def 또는 bc 같으면 '를 일치합니다 티. 그리고 컴파일 타임에 알려지지 않은 정규 표현식을 사용하기를 원합니다.

+7

수행하려는 작업의 예를 게시 할 수 있습니까? –

+0

달성하려는 목표의 예가 있습니까? –

+0

요청한 내용은 일치하는 데 필요한 문자를 확인하는 것입니다. 예. "abc"는 패턴이고 "ab"가 제공됩니다. 함수의 결과는 "c"입니다. 그러나, 그 패턴은 가능한 그러한 것을 만들기 위해 매우 명시 적이어야합니다. – Alex

답변

1

정규 표현식은 O (n) 시간 길이 n의 입력에 대한 일치를 결정할 수있는 의사 결정 트리로 컴파일됩니다. 사용자 정의 RE 파서는 실패까지 의사 결정의 수를 단순히 계산할 수 있습니다. 이는 일치에 필요한 단계 수와 비교할 때 RE에 대한 인수의 "근접성"을 나타냅니다. 상당히 단순한 RE를 사용한다고 가정하고 문자열의 끝에 문자를 추가하는 것을 "확장 된"의미로하면 이것은 계산 상 가능합니다.

+0

그게 내가 먼저하려고 할 것입니다. 감사합니다. – Natalia

+0

하지만 결정 트리에 어떻게 접근 할 수 있습니까? 네가 그렇게 할 수 있다는 것을 몰랐다. – neontapir

+0

예를 들어 C#의 Match 개체에서이 정보를 얻을 수 있다면 훨씬 쉬운 문제입니다. 나는 사용자 정의 구문 분석기를 만드는 것이 자신의 의사 결정 트리/DFA를 생성한다고 가정합니다. 자세한 내용은 http://en.wikipedia.org/wiki/Regular_expression#Implementations_and_running_times를 참조하십시오. – paislee

0

저는 독자적인 Regex 파서를 작성해야한다고 생각합니다. 임의의 Regex를 원소로 분해 할 수 있어야합니다. 예를 들어, /abc/을 가져와 { /abc/, /ab/, /a/ }을 반환하고 입력 내용이 일치하는지 확인해야합니다.

/abc/과 같은 간단한 표현에서는 그리 좋지 않을 수도 있지만 lookbehind 인 (?<=s)t과 같은 더 복잡한 표현식은 부담 스럽습니다.

+0

정말 간단한 정규 표현식에 대한 답변을 주셔서 감사합니다.이 접근법은 충분히 좋을 것입니다. – Natalia