Perl 학습 노트 - 정규 표현 식 처리 텍스트

12276 단어 정규 표현 식
1. 정규 표현 식 으로 텍스트 바 꾸 기  s/// 
   s/;/;/ 일치 하 는 데 실패 하면 아무것도 일어나 지 않 고 변수 도 영향 을 받 지 않 습 니 다. 불 값 을 되 돌려 주 고 교체 에 성공 할 때 진실 입 니 다. 그렇지 않 으 면 가짜 입 니 다.
$roger = "This is a text";

$roger =~ s/This (\w+)/This was/;

print $roger;
$_ = "green scaly dinosaur";

s/(\w+) (\w+)/$2, $1/; print; printf("
"); #scaly, green dinosaur s/^/huge, /;print; printf("
"); #huge, scaly, green dinosaur s/,.*een//;print; printf("
"); #huge dinosaur s/green/red/; print; printf("
"); # , s/\w+$/($`!)$&/;print; printf("
"); #huge (huge !)dinosaur s/\s+(!\W+)/$1 /;print; printf("
"); #huge (huge!) dinosaur s/huge/gigantic/;print; printf("
"); #gigantic (huge!) dinosaur

경계 문자 바 꾸 기: 좌우 구분 이 없 는 문자 (비 쌍) 를 3 번 반복 하면 됩 니 다. 그렇지 않 으 면 2 쌍, 한 쌍 의 링 인덱스 모드, 한 쌍 의 링 인덱스 로 문자열 을 바 꾸 면 됩 니 다. 링 문자열 의 경계 가 링 과 바 뀌 는 경계 에 부합 되 는 것 은 같 지 않 습 니 다. 예 를 들 어:  s#roger#loger#;  s{roger}{loger};  s[roger](loger);  s#loger#; 
2. 전역 교체 / g 사용
$_ = "roger, go on roger!";

s/roger/loger/g; #           

print ;

   상용 기교
$_ = "     This is a text   that don't    beatiful!   ";

s/\s+/ /g;  #       

print; printf("
"); s/^\s+//; # print; printf("
"); s/\s+$//; # print; printf("
");

 수정자 로 대소 문자 수정:
\ \ U 는 위치 뒤의 모든 문 자 를 대문자 로 변환 합 니 다. \ u 는 위치 뒤의 첫 번 째 문 자 를 대문자 로 변환 합 니 다.
\ \ L 은 그 위치 에 있 는 모든 문 자 를 초등학교 로 변환 합 니 다. \ l 은 위치 에 있 는 첫 번 째 문 자 를 소문 자로 변환 합 니 다.
3. split 연산 자
split 는 정규 표현 식 을 사용 하여 구분자 에 따라 문자열 을 뜯 고 해당 하 는 배열 을 되 돌려 줍 니 다. 탭 문자 / 콜론 / 공백 / 임의의 기호 로 구 분 된 데 이 터 를 처리 하 는 데 편리 합 니 다. 구분자 만 모드 로 쓸 수 있다 면 split 로 데 이 터 를 추출 할 수 있 습 니 다.
사용법:  @fields = split //, $string; 두 구분자 가 연결 되면 빈 필드 가 생 긴 다. split 는 시작 하 는 모든 빈 필드 를 유지 하고 끝 에 있 는 빈 필드 를 제거 합 니 다.
기본 값: 공백 문자 로 $ 분할 하기 ;  ... 에 해당 하 다  split /\s+/,$_; 그러나 완전히 그렇지 는 않다. 왜냐하면 그것 은 시작 하 는 빈 필드 를 더욱 생략 할 것 이기 때문이다.
4. join 함수 (풀 조작) -- split 의 역작 동
join 은 정규 표현 식 을 사용 하지 않 습 니 다. 첫 번 째 매개 변수 (패턴 이 아 닌 문자열) 를 풀 로 하고 뒤의 다른 매개 변수 (길 어 지 는 매개 변수) 로 구 성 된 세 션 을 붙 입 니 다. 풀 은 세 션 사이 에 만 사 용 됩 니 다. 
5. 목록 컨 텍스트 의  m// 
split 의 깨 우 침 을 받 았 습 니 다. 구분자 가 진정 으로 유용 한 데이터 필드 가 아 닙 니 다. 목록 컨 텍스트 에 일치 할 때 일치 하면 모든 캡 처 변수의 목록 을 되 돌려 줍 니 다. 일치 하지 않 으 면 빈 목록 으로 돌아 갑 니 다.
$_ = "Hello there, neighbor!";

@roger = /(\S+) (\S+), (\S+)/;

print $roger[1]; #there

/ g 도 m / / 에 사용 할 수 있 습 니 다.
#                 ,   Barney Rubble   ,    Barney  ,Rubble  

my $data = "Barney Rubble Fred Flintstone Wilma Flintstone";

my %last_name = ($data =~ /(\w+)\s+(\w+)/g);

print $last_name{Wilma}."
";

6. 비 탐욕
현재 파악 하고 있 는 모든 양 어 는 탐욕 적 이 므 로 가능 한 한 많은 문 자 를 일치 시 킬 것 입 니 다. 만족 하지 않 으 면 일치 하지 않 는 것 으로 돌아 갑 니 다. 예 를 들 어  .* , 탐 욕 스 럽 지 않 은 양 어 를 사용 하려 면, 양사 뒤에 하 나 를 더 할 수 있다. ? , 그래서 탐욕 이 아 닌 양 어 는 다음 과 같다.  +?  *?  ??  {m,n}? 
7. 줄 간 패턴 일치
일반적으로 펄 의 정규 표현 식 은 한 줄 의 텍스트 와 일치 합 니 다. Perl 은 임의의 길이 의 문자열 을 처리 할 수 있 기 때문에, 그래서 보통 문제 가 없습니다. 지금 은 여러 줄 의 텍스트 를 처리 하 는 것 에 대해 토론 하고 있 습 니 다.
다 중 줄 텍스트 표시: 한 문자열 에 다 중 줄 텍스트 를 표시 하지만 문자열 의 처음 과 끝 이 일치 할 때 신경 쓰 지 않 는 존재 입 니 다. ^ $와 일치 하 는 것 은 전체 문자열 의 끝 이기 때 문 입 니 다. 존재 하 는 것 을 고려 하려 면 문자열 을 다 중 줄 텍스트 로 처리 하려 면 패턴 뒤에 추가 해 야 합 니 다.  /m  ,(multiple lines) 을 표시 합 니 다. 이때 ^ 와 $는 같은 첫 번 째 와 끝 을 표시 합 니 다.
open MYFILE, ">> a.txt" or die "Can't open file!
"; $_ = "I'm much better
than Barney is
at bowling,
Wilma.
"; if(/^I'm.*?better$/m){ print MYFILE $&."
"; #I
'm much better } close MYFILE;

8. 한 번 에 여러 파일 업데이트
로 컬 시간 가 져 오기,  $date = localtime; 이것 은 표준 시간 문자열 을 가 져 올 수 있 습 니 다. localtime 을 직접 인쇄 하면 시간 스탬프 를 받 을 수 있 습 니 다. 시스템 의 date 명령 으로 도 가능 합 니 다.  $date = `date` 
펄 에서 파일 을 수정 하면 다이아몬드 연산 자 와 특수 변 수 를 사용 할 수 있 습 니 다.  $^I 
chomp(my $date = localtime);

$^I = ".bak"; #         undef,            ,                    ,          ,              ,          ,       

while(<>){

    s/^Author:.*/Author: Roger/; #            

    #              ,             

    print;  #         ,               

}

9. 명령 행 온라인 편집 - 이전 항목 에 대한 재 간소화
명령 줄:  $ perl -p -i.bak -w -e 's/Author:Roger.*/Author:Roger/g' a*.dat , 기능 이 위 와 같다.
- p 코드 생 성 표시  while(<>){print;} 
- i. bak 는 변수 $^ I 에 ". bak" 값 을 부여 합 니 다.
- w 경고 열기 표시
- e 는 여러 개의 문구 가 있 음 을 나타 내 고 마지막 하 나 는 분 호 를 생략 할 수 있 음 을 나타 낸다.

좋은 웹페이지 즐겨찾기