Thursday, March 01, 2007
Perl/펄 정규식] HTML 태그 속의 텍스트, URL 링크 추출; Regex
특정 HTML 태그 속의 텍스트를 정규식으로 추출하는 방법입니다. 예를 들어, <title></title> 태그 속의 페이지 제목을 이 방법으로 추출할 수 있습니다. HTML이 아닌 일반 텍스트 파일에서도 사용 가능합니다.
정규식 사용법 중에서 가장 중요하고 가장 실용적인 예제일 것입니다.
아래 예제에서, $1 이라는 것은, 정규식에서 첫번째 소괄호"()"가 매치되는 부분이 자동으로 저장되는 변수입니다. 읽기 전용 변수이기에 $1 에 수동으로 값을 대입할 수는 없습니다.
파일명: example.pl
※ 아래 박스 클릭 후, 키보드 화살표 키로 좌우 스크롤 가능함
그렇지만 HTML 파일 전체를 TXT 로 변환한다든지 하는 용도로는 위의 예제를 사용하기 곤란합니다. HTML 의 모든 태그를 제거하는 것은 정규식으로는 사실상 불가능합니다. 중첩된 태그나, 태그 속에서 행갈이가 된 경우, 닫히지 않은 태그의 처리 등 여러 가지 복잡한 문제가 많기 때문입니다: 참고 ▶▶ PHP] HTML 본문 텍스트 추출, 태그 제거; HTML to TEXT; Strip Tags
실제 HTML 파일에서 문자열을 추출하는 실용적인 예제입니다: ▶▶ Perl/펄 정규식] HTML 파일, 문자열(타이틀), URL 추출; UTF-8 Regex
추출 결과를 배열에 저장: ▶▶ 펄/Perl 정규식] 문자열 추출; Regex String Extract Example
정규식 사용법 중에서 가장 중요하고 가장 실용적인 예제일 것입니다.
아래 예제에서, $1 이라는 것은, 정규식에서 첫번째 소괄호"()"가 매치되는 부분이 자동으로 저장되는 변수입니다. 읽기 전용 변수이기에 $1 에 수동으로 값을 대입할 수는 없습니다.
정규식으로, 변수에서 문자열 추출 예제
파일명: example.pl
※ 아래 박스 클릭 후, 키보드 화살표 키로 좌우 스크롤 가능함
#!/usr/bin/perl
use strict; use warnings;
my $foo;
my $result;
#####################################################
# 타이틀 태그 속의 텍스트 추출
$foo = "<title>나의 홈페이지</title>";
# 다음 정규식에서 (.*) 바로 이 부분이 캡처되는 부분입니다.
# 정규식을 둘러싸는 슬래시 기호(/)가 태그 안에서도 중복되기에
# \/ 이렇게 앞에 백슬래쉬(\)를 붙여서 이스케이프했습니다.
$foo =~ /<title>(.*)<\/title>/;
$result = $1;
print $result, "\n";
# 출력 결과: 나의 홈페이지
#####################################################
# HTML 링크 태그에서, URL만 추출
# 문자열 속에 이미 큰따옴표가 사용되기에, 문자열 정의는 작은따옴표를 사용했음
$foo = '<a href="http://example.com/"><img src="img/title.gif" title="나의 홈페이지" alt="여행 사진" /></a>';
$foo =~ /<a href="(.*)"><img src=/;
$result = $1;
print $result, "\n";
# 출력 결과: http://example.com/
use strict; use warnings;
my $foo;
my $result;
#####################################################
# 타이틀 태그 속의 텍스트 추출
$foo = "<title>나의 홈페이지</title>";
# 다음 정규식에서 (.*) 바로 이 부분이 캡처되는 부분입니다.
# 정규식을 둘러싸는 슬래시 기호(/)가 태그 안에서도 중복되기에
# \/ 이렇게 앞에 백슬래쉬(\)를 붙여서 이스케이프했습니다.
$foo =~ /<title>(.*)<\/title>/;
$result = $1;
print $result, "\n";
# 출력 결과: 나의 홈페이지
#####################################################
# HTML 링크 태그에서, URL만 추출
# 문자열 속에 이미 큰따옴표가 사용되기에, 문자열 정의는 작은따옴표를 사용했음
$foo = '<a href="http://example.com/"><img src="img/title.gif" title="나의 홈페이지" alt="여행 사진" /></a>';
$foo =~ /<a href="(.*)"><img src=/;
$result = $1;
print $result, "\n";
# 출력 결과: http://example.com/
그렇지만 HTML 파일 전체를 TXT 로 변환한다든지 하는 용도로는 위의 예제를 사용하기 곤란합니다. HTML 의 모든 태그를 제거하는 것은 정규식으로는 사실상 불가능합니다. 중첩된 태그나, 태그 속에서 행갈이가 된 경우, 닫히지 않은 태그의 처리 등 여러 가지 복잡한 문제가 많기 때문입니다: 참고 ▶▶ PHP] HTML 본문 텍스트 추출, 태그 제거; HTML to TEXT; Strip Tags
실제 HTML 파일에서 문자열을 추출하는 실용적인 예제입니다: ▶▶ Perl/펄 정규식] HTML 파일, 문자열(타이틀), URL 추출; UTF-8 Regex
추출 결과를 배열에 저장: ▶▶ 펄/Perl 정규식] 문자열 추출; Regex String Extract Example
tag: perl
Perl | 펄 프로그래밍
tag: regex
정규식 | 정규표현식 | Regex | Regular Expression
<< Home