Tuesday, March 13, 2007
Perl 펄] 정규식 옵션 m s 의미 사용법, Regex 문자열 검색 치환
정규식 맨 앞부분의 m과 s는 옵션이 아니라 연산자(operator)입니다. 옵션은 정규식의 맨 끝에 붙는 g나 i 같은 것입니다.
펄 정규식에서는 // 이런 슬래쉬 기호 두 개 사이에다 정규식을 기술합니다. 문자열 찾기인데 이것은 m// 과 동일한 것입니다. m// 을 간단히 줄여서 그냥 // 라고 하는 것입니다.
m// 또는 // 는 "찾기"에 해당하고
s/// 는 "바꾸기(치환)"에 해당합니다.
그런데 가끔 m// 이렇게 m을 명시적으로 사용해야 할 경우가 있습니다.
정규식에서 // 이런 슬래시 기호를 Delimiter(딜리미터; 구분 기호) 라고 하는데, 이 Delimiter 를 다른 기호로 바꾸어야 할 경우입니다.
만약 문자열 자체에 슬래시 기호가 많이 포함되어 있다면, 그 슬래시 기호 앞에 일일이 백슬래쉬(\)를 붙여 이스케이프해주는 것보다는, Delimiter 를 아예 다른 기호로 바꾸는 것이 편리할 것입니다.
Delimiter 를 다른 기호로 바꿀 때에는 정규식에서 m 을 생략할 수 없습니다. 다음 예제와 같습니다.
※ 아래 박스 클릭 후, 키보드 화살표 키로 좌우 스크롤 가능함
m^철수^ 에서
^철수^ 이렇게 m을 생략하면
syntax error at D:\Z\example.pl line 19, near "=~ ^"
Unrecognized character \xC3 at D:\Z\example.pl line 19.
이런 에러가 납니다.
s 연산자의 사용법은 여기에 있습니다: ▶▶ [Perl 정규식] 문자열 치환(바꾸기)/순서 변경/삭제 - s/// 치환 연산자(Substitution Operator)
펄 정규식에서는 // 이런 슬래쉬 기호 두 개 사이에다 정규식을 기술합니다. 문자열 찾기인데 이것은 m// 과 동일한 것입니다. m// 을 간단히 줄여서 그냥 // 라고 하는 것입니다.
m// 또는 // 는 "찾기"에 해당하고
s/// 는 "바꾸기(치환)"에 해당합니다.
그런데 가끔 m// 이렇게 m을 명시적으로 사용해야 할 경우가 있습니다.
정규식에서 // 이런 슬래시 기호를 Delimiter(딜리미터; 구분 기호) 라고 하는데, 이 Delimiter 를 다른 기호로 바꾸어야 할 경우입니다.
만약 문자열 자체에 슬래시 기호가 많이 포함되어 있다면, 그 슬래시 기호 앞에 일일이 백슬래쉬(\)를 붙여 이스케이프해주는 것보다는, Delimiter 를 아예 다른 기호로 바꾸는 것이 편리할 것입니다.
Delimiter 를 다른 기호로 바꿀 때에는 정규식에서 m 을 생략할 수 없습니다. 다음 예제와 같습니다.
m 연산자 사용 예제
※ 아래 박스 클릭 후, 키보드 화살표 키로 좌우 스크롤 가능함
#!/usr/bin/perl
use strict; use warnings;
my $s = "철수는 중국집에서 자장면을 시켰습니다.";
# 패턴 매치 연산자인 m 을 생략한 일반적인 경우
if ($s =~ /자장면/) {
print "자장면이라는 문자열을 찾았음\n";
}
# m 을 붙인 경우
if ($s =~ m/철수/) {
print "철수라는 문자열을 찾았음\n";
}
# m 을 붙이고, 정규식 구분자를 캐럿(^) 기호로 변경한 경우
if ($s =~ m^철수^) {
print "철수라는 문자열을 찾았음\n";
}
use strict; use warnings;
my $s = "철수는 중국집에서 자장면을 시켰습니다.";
# 패턴 매치 연산자인 m 을 생략한 일반적인 경우
if ($s =~ /자장면/) {
print "자장면이라는 문자열을 찾았음\n";
}
# m 을 붙인 경우
if ($s =~ m/철수/) {
print "철수라는 문자열을 찾았음\n";
}
# m 을 붙이고, 정규식 구분자를 캐럿(^) 기호로 변경한 경우
if ($s =~ m^철수^) {
print "철수라는 문자열을 찾았음\n";
}
m^철수^ 에서
^철수^ 이렇게 m을 생략하면
syntax error at D:\Z\example.pl line 19, near "=~ ^"
Unrecognized character \xC3 at D:\Z\example.pl line 19.
이런 에러가 납니다.
s 연산자의 사용법은 여기에 있습니다: ▶▶ [Perl 정규식] 문자열 치환(바꾸기)/순서 변경/삭제 - s/// 치환 연산자(Substitution Operator)
tag: perl
Perl | 펄
tag: regex
정규식 | 정규표현식 | Regex | Regular Expression
<< Home