Perl 학습 노트 - 정규 표현 식 처리 텍스트
12276 단어 정규 표현 식
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
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 /
기본 값: 공백 문자 로 $ 분할 하기 ; ... 에 해당 하 다 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 는 여러 개의 문구 가 있 음 을 나타 내 고 마지막 하 나 는 분 호 를 생략 할 수 있 음 을 나타 낸다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
awk 상용 명령awk 는 모든 입력 줄 을 하나의 기록 으로 인식 하고 그 줄 의 모든 단어 도 메 인 을 하나의 필드 로 인식 합 니 다. ARGC 명령 줄 에 awk 스 크 립 트 가 들 어 오 는 매개...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.