2008-10-22 1 views
1

저는 학생들이 정규 표현식을 배우는 데 도움이되는 도구를 작성하고 있습니다. 아마도 Java로 작성하고있을 것입니다.Perl 스타일의 정규식 인터프리터가 기본 또는 확장 된 정규식 인터프리터처럼 동작하도록하십시오.

아이디어는 다음과 같습니다. 학생이 정규식을 입력하고 텍스트의 어떤 부분이 정규식과 일치하는지 보여줍니다. 충분히 간단합니다.

  • 기본 정규 표현식 (생각 : 그렙)
  • 확장 정규 표현식 (생각 : egrep을)
  • 펄의 부분 집합

    는하지만 다음과 같은 몇 가지 정규식 "맛"을 지원하고자 등 w \ 문자 클래스, \ s을 포함하여 정규 표현식,

  • SED 스타일의 정규 표현식

JAV a에는 java.util.Regex 클래스가 있지만 기본 및 확장 RE의 수퍼 집합 인 Perl 스타일의 정규 표현식 만 지원합니다. 내가 필요한 것은 주어진 정규 표현식을 취하여 주어진 풍미의 일부가 아닌 메타 문자를 벗어나는 방법입니다. 그런 다음 Regex 객체에 줄 수 있고 선택된 RE 인터프리터 용으로 작성된 것처럼 동작합니다. 다음 정규식 주어진 예를 들어

:

^\w+[0-9]{5}-(\d{4})?$ 

기본 정규식으로, 그것은으로 해석 될 것이다 : 확장 된 정규 표현식으로

^\\w\+[0-9]\{5\}-\(\\d\{4\}\)\?$ 

, 그것은 다음과 같습니다

^\\w+[0-9]{5}-(\\d{4})?$ 

그리고 Perl 스타일 정규식은 원래 표현식과 동일합니다.

정규 표현식에 대한 정규 표현식을 사용하면 정규 표현식을 통해 검색을 수행하고 비 메타 문자를 인용 할 수 있습니까? 내가 뭘 할 수 있을까? 사용할 수있는 대체 Java 클래스가 있습니까?

답변

1

또는 Jakarta ORO을 사용할 수 있습니까?

지원 다음과 같은 정규 표현식 '맛'

  • Perl5에 호환 정규 표현식
  • AWK와 같은 정규 표현식
  • 글로브 식
  • 는 '일반에 대한
1

: 당신은 그 표현의 참여 및 separatly 각 토큰과 일치 할 수 Is there a regular expression to detect a valid regular expression?

:

[^?+*{}()[\]\\]    # literal characters 
\\[A-Za-z]      # Character classes 
\\\d+       # Back references 
\\\W       # Escaped characters 
\[\^?(?:\\.|[^\\])+?\]   # Character classs 
\((?:\?[:=!>]|\?<[=!])?  # Beginning of a group 
\)        # End of a group 
(?:[?+*]|\{\d+(?:,\d*)?\})\?? # Repetition 
\|        # Alternation 

각 경기를, 당신은 적절한 대체 몇 가지 사전을 가질 수있다 목표 맛.

1

, 왜 단지 각각의 최종 호스트에 밖으로 껍질 정규식? 즉, BRE에 grep, ERE에 egrep, PCRE에 perl 등을 사용 하시겠습니까? 모듈이 수행해야하는 유일한 작업은 UI뿐입니다. 내가 본 (정규식 인) 정규 표현식 테스터의 대부분은이 접근법의 변형을 사용합니다.

또 다른 라이브러리 제안이 필요하면 BRE/ERE/POSIX/AWK 부분에 대해서는 TRE을보십시오. 다시 참조를 지원하지 않으므로 PCRE/Python/Ruby/JS/Java가 있습니다.