TRegExpr 정규 표현 식
사실 이 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 파일 을 참고 하 는 방법 도 많 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
콜백 함수를 Angular 하위 구성 요소에 전달이 예제는 구성 요소에 함수를 전달하는 것과 관련하여 최근에 직면한 문제를 다룰 것입니다. 국가 목록을 제공하는 콤보 상자 또는 테이블 구성 요소. 지금까지 모든 것이 구성 요소 자체에 캡슐화되었으며 백엔드에 대한 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.