TRegExpr 정규 표현 식

전재: DELPHI 의 REGEXPR
사실 이 Pascal 단원 은 제 가 몇 개의 포럼 에서 추천 한 적 이 있 고 제 가 유일 하 게 사용 할 수 있 는 DELPHI 아래 의 정규 표현 식 입 니 다.정규 표현 식 은 매우 번 거 롭 고 강 한 것 입 니 다. 어린 학생 들 은 재능 이 부족 하고 정규 표현 식 의 튜 토리 얼 을 쓸 준비 도 하지 않 습 니 다. 이 단원 에 대한 소 개 를 통 해 간단명료 하고 유용 한 예 가 있 을 것 입 니 다.먼저 이 단원 의 주인공 을 소개 합 니 다. TRegExpr 류 는 많은 멤버 를 포함 합 니 다. 여기 서 일반적인 일치 과정 만 간단하게 소개 합 니 다.다음은 텍스트 에서 메 일 주 소 를 추출 하 는 코드 입 니 다.
Procedure GetName(TextToCheck:String;aList:TStringList);
Var
    myExpr: TRegExpr;
begin
    myExpr := TRegExpr.Create;
    Try
        myExpr.Expression := 'name="(.*?)"';
        if myExpr.Exec(TextToCheck) then
        repeat
            aList.Add(myExpr.Match[1]);
        until not MyExpr.ExecNext;
    finally
        myExpr.Free;
    end;
end;

다음은 이 코드 에 대해 간략하게 설명 하 겠 습 니 다. 먼저 my Expr. Expression: = 'name =' (. *?) '입 니 다.이 문 구 는 name = "XXXX" 형식의 문자열 을 사용 합 니 다.'. *?' 는 흔히 볼 수 있 는 단락 으로 임의의 문자열 에 대한 '비 탐욕 일치' 를 나타 내 며 일치 하 는 조건 에 부합 되 는 가장 짧 은 문자열 을 나타 낸다. 탐욕 비 탐욕 에 관 한 문 제 는 뒤에서 설명 한다.괄호 는 이 텍스트 에 대한 인용 을 표시 합 니 다. 일치 하 는 문자열 은 TRegExpr 의 Match 배열 에 저 장 됩 니 다.다음은 if my Expr. Exec (TextToChceck) 라 는 문장 입 니 다. 이 문장 은 위 에서 언급 한 정규 표현 식 을 이용 하여 TextToCheck 를 일치 시 키 기 시작 합 니 다.Exec 방법 은 세 가지 과부하 가 있 습 니 다.
function Exec (const AInputString : AnsiString) : boolean; // AInputString      
function Exec : boolean; overload; // InputString      
function Exec (AOffset: integer) : boolean; overload; // InputString  , AOffset        

 
이 방법 은 불 모양 의 값 을 되 돌려 줍 니 다. 만약 사실 이 라면 InputString 에 표현 식 과 일치 하 는 모드 를 포함 하고 있 음 을 나타 냅 니 다. 예 를 들 어 'name =' Hello. Gif '를 매개 변수 로 하면 True 를 되 돌려 줍 니 다.다음 문장 에 나타 난 my Expr. Match [1] 는 이번 일치 하 는 결 과 를 추출 하 는 마지막 ExecNext 를 사용 합 니 다. 위 에서 언급 한 세 번 째 재 부팅 을 사용 하여 중복 되 는 문자열 을 연속 적 으로 일치 시 키 고 결 과 를 되 돌려 주 는 의 미 는 Exec 와 같 습 니 다. 그 중에서 Match [0] 는 전체 표현 식 의 일치 결 과 를 표시 합 니 다.다음 배열 요 소 는 괄호 의 일치 결 과 를 나타 내 고 요소 번 호 는 괄호 에서 왼쪽 에서 오른쪽으로 증가 하 며 괄호 를 끼 워 넣 으 면 안에서 밖으로 증가 합 니 다.예 를 들 어 E - Mail 주소 에 대한 간단 한 일치: Quotes From??입력 문자열: '"[email protected]","[email protected]"정규 표현 식:" (. *?) @ (. *?) "," 실행 결 과 는 다음 과 같 습 니 다: 0 "[email protected]", 1 [email protected] dirt 3 sina. com 에서 Match 배열 의 결과 배열 순 서 를 볼 수 있 습 니 다.위의 글 에 나타 난. *?항상 엄밀 하지 않 은 장소 에 사 용 됩 니 다. 예 를 들 어 앞에서 사용 한 메 일 주소 추출, 누 군 가 는 수백 글자 의 검증 표현 식 을 씁 니 다.그 중에서 '...' 는 임의의 단일 문 자 를 나타 내 고 '*' 는 앞의 문자 (문자열) 가 적어도 한 번 나타 나 는 것 을 나타 내 며 '?'여기 서 탐욕 이 아 닌 한정 부적 입 니 다. 간단 한 예 를 들 어 'aaa', 'bbb' 라 는 문자열 을 들 어 '(. *?)' 로 일치 하면 Match [1] 의 내용 은 'aaa' 입 니 다. 그 중의 '를 없 애 면?' 입 니 다.Match [1] 는 'aaa' bb '가 되 었 습 니 다. 이 는 탐욕 과 비 탐욕 의 차 이 를 알 수 있 습 니 다.기본 적 인 매 칭 과정 은 여기까지 입 니 다. 시간 이 있 으 면 다른 관련 내용 을 계속 쓸 것 입 니 다. 벽돌 을 버 리 세 요.
 
Delphi 7 에 RegExpr 클래스 사용 하기 (정규 표현 식 클래스) 
    Delphi 에 서 는 자체 정규 표현 식 라 이브 러 리 가 없습니다. 인터넷 에서 찾 을 수 있 는 Delphi 에 사용 되 는 정규 표현 식 류 는 대체적으로 두 가지 가 있 습 니 다. 각각 PerlRegEx 와 RegExpr 입 니 다.전 자 는 상당히 강하 지만 프로그램 을 발표 할 때 그의 DLL 파일 을 가 져 가 야 하기 때문에 매우 번거롭다.후 자 는 Delphi 를 완전히 사용 하여 이 루어 집 니 다. 기능 이 약간 뒤떨어 지지 만 발표 와 사용 이 편리 하고 원본 파일 을 직접 사용 하 며 발표 할 때 그 어떠한 파일 도 추가 할 필요 가 없습니다.    그럼 후 자 를 말 하 는 김 에 공 부 를 해 보 자.
    원본 파일 과 예제 다운로드:http://regexpstudio.com/TRegExpr/TRegExpr.html
    추가 도구 RegExpStudio 다운로드:http://regexpstudio.com/RegExpStudio.html
    정규 표현 식 문법:http://regexpstudio.com/TRegExpr/Help/RegExp_Syntax.html
    그 를 사용 하려 면 RegExpr. pas 를 프로젝트 (Delphi 메 인 메뉴 Project - > Add to procject..) 에 추가 한 다음 정규 단원 에서 설명 하면 됩 니 다. 예 를 들 어:
implementation uses RegExpr; {$R *.DFM}
    interface 가 아 닌 implementation 에 추가 하 는 것 이 좋 습 니 다.interface 뒤에 사용 되 는 것 은 시스템 자체 테이프 이 고 implementation 후 사용자 정의 입 니 다.자세 한 설명 은 여기 보 세 요.
    간단 한 예제 입 니 다. 모든 메 일 함 수 를 추출 하고 이 함 수 를 호출 하면 텍스트 에 있 는 모든 메 일 함 수 를 되 돌려 줍 니 다.
function ExtractEmails(const AInputString: string): string;
const
EmailRE = '[_a-zA-Z\d\-\.]+@[_a-zA-Z\d\-]+(\.[_a-zA-Z\d\-]+)+';
var
    r: TRegExpr;
begin
    Result := '';
    r := TRegExpr.Create;
    try
       r.Expression := EmailRE;
       if r.Exec(AInputString) then
       repeat
            Result := Result + r.Match[0] + ',';
       until not r.ExecNext;
    finally 
        r.Free;
    end;
end;

 
    다음은 제 가 Help 파일 에서 번역 한 주요 인터페이스 에 대한 설명 입 니 다. (주: 영어 대하 가 있 습 니까? 그 영어 대하 가 모두 번역 되 기 를 바 랍 니 다.)
class function VersionMajor : integer; 주 버 전 번 호 를 되 돌려 줍 니 다.class function VersionMinor : integer; 버 전 번호 되 돌려 주기.
예 를 들 어 제 가 다운로드 한 버 전 은 v 0.944 입 니 다. 그러면 VersionMajor = 0, VersionMinor = 944 는 큰 실제 적 인 의미 가 없 는 방법 입 니 다.
function Exec (const AInputString : string) : boolean; 문자열 AInputString 이 일치 하 는 지 되 돌려 줍 니 다.
function ExecNext : boolean; 다음 일치 하 는 항목 이 있 는 지 찾 습 니 다.
property MatchPos [Idx : integer] : integer; 지정 한 일치 하 는 문자열 의 시작 위 치 를 되 돌려 줍 니 다.
property MatchLen [Idx : integer] : integer; 지정 한 일치 하 는 문자열 의 길 이 를 되 돌려 줍 니 다.
property Match [Idx : integer] : string; 지정 한 일치 하 는 문자열 을 되 돌려 줍 니 다.
function ReplaceRegExpr (const ARegExpr, AInputStr, AReplaceStr : string; AUseSubstitution : boolean = False) : string; 일치 하 는 모든 문자열 을 AReplace Str 로 바 꾸 고 되 돌려 줍 니 다.
또한 리 턴 을 표시 합 니 다. \ s 는 빈 칸 을 표시 합 니 다.
    예제 파일 과 Help 파일 을 참고 하 는 방법 도 많 습 니 다.

좋은 웹페이지 즐겨찾기