>백엔드 개발 >PHP 튜토리얼 >phpSpider进阶指南:如何利用正则表达式提取网页内容?

phpSpider进阶指南:如何利用正则表达式提取网页内容?

WBOY
WBOY원래의
2023-07-24 20:28:461486검색

phpSpider 고급 가이드: 정규식을 사용하여 웹 콘텐츠를 추출하는 방법은 무엇입니까?

머리말:
웹 크롤러를 개발할 때 웹 페이지에서 특정 콘텐츠를 추출해야 하는 경우가 많습니다. 정규식은 웹페이지에서 패턴 일치를 수행하고 필요한 콘텐츠를 빠르고 정확하게 추출하는 데 도움이 되는 강력한 도구입니다. 이 문서에서는 정규식을 사용하여 PHP에서 웹 콘텐츠를 추출하는 방법과 예제 코드에 대한 심층적인 이해를 제공합니다.

1. 정규식의 기본 구문
정규식은 문자 패턴을 설명하는 방법입니다. 정규식을 사용하여 문자열을 유연하게 일치시키고 찾고 바꾸세요. 다음은 정규식의 몇 가지 기본 구문입니다.

  1. 문자 일치:
  2. .: 모든 문자 일치
  3. []: 대괄호 안의 모든 문자 일치
  4. w: 모든 문자, 숫자 또는 밑줄 일치
  5. d: 모든 문자 일치 숫자
  6. s: 빈 문자와 일치
  7. : 단어의 경계와 일치
  8. 반복 일치:
    • : 이전 문자의 0개 이상의 반복과 일치
    • : 다음의 1개 이상의 반복과 일치 이전 문자
  9. ? : 이전 문자의 0 또는 1 반복과 일치
  10. {n} : 이전 문자의 n번 반복과 정확히 일치
  11. {n,} : 이전 문자의 최소 n 반복과 일치
  12. {n,m} : 이전 문자의 n개 이상, 최대 m개의 반복과 일치합니다.
  13. 이스케이프 문자:
  14. : 예를 들어 이스케이프 특수 문자는 일치하는 지점 번호를 나타냅니다.

2. preg_match 함수를 사용하여 정규 매칭
PHP는 정규식 처리를 위한 일련의 함수를 제공하며, 그 중 가장 일반적으로 사용되는 것은 preg_match 함수입니다. 이 함수는 일반 문자열 일치를 수행하는 데 사용됩니다. preg_match 함수의 기본 사용법은 다음과 같습니다.

$pattern = '/正则表达式/';
$string = '要匹配的字符串';
$result = preg_match($pattern, $string, $matches);

그 중 $pattern은 일치시킬 정규식, $string은 일치할 문자열, $result는 일치 결과의 부울 값, $matches입니다. 일치하는 결과를 저장할 배열입니다.

3. 예제 데모
정규식을 사용하여 웹 콘텐츠를 추출하는 방법을 예제를 사용하여 설명하겠습니다.

다음 대상 웹 페이지에서 모든 링크를 추출한다고 가정합니다.

<html>
<body>
<a href="https://www.example.com/link1">Link 1</a>
<a href="https://www.example.com/link2">Link 2</a>
<a href="https://www.example.com/link3">Link 3</a>
</body>
</html>

다음 정규식을 사용하여 모든 링크를 일치시킬 수 있습니다.

$pattern = '/<as+href=["'](.*?)["'].*>(.*?)</a>/';

그런 다음 preg_match_all 함수를 사용하여 모든 결과를 일치시킬 수 있습니다. 2차원 배열:

$pattern = '/<as+href=["'](.*?)["'].*>(.*?)</a>/';
$string = '
            
              Link 1
              Link 2
              Link 3
            
          ';
preg_match_all($pattern, $string, $matches);

var_dump($matches[1]);  // 输出所有链接

이 코드를 실행하면 다음과 같은 결과가 출력됩니다.

array(3) {
  [0]=>
  string(23) "https://www.example.com/link1"
  [1]=>
  string(23) "https://www.example.com/link2"
  [2]=>
  string(23) "https://www.example.com/link3"
}

이런 방식으로 웹페이지에서 모든 링크를 성공적으로 추출했습니다.

4. 참고
크롤러 개발에 정규식을 사용할 때 다음 사항에 주의해야 합니다.

  1. 욕심이 많고 욕심이 없음
    기본적으로 정규식의 반복 일치는 욕심입니다. , 가능한 한 많이 일치하십시오. ?를 사용하여 탐욕스러운 일치를 비탐욕적인 일치로 변경할 수 있습니다.

예를 들어 다음 정규식은 전체 문자열 "abcdef"에 대해 탐욕적으로 일치합니다.

$pattern = '/a.*b/';
$string = 'abcdef';
preg_match($pattern, $string, $matches);
var_dump($matches[0]);  // 输出'abcdef'

탐욕적 일치를 비탐욕적 일치로 변경하면 가장 짧은 하위 문자열만 일치합니다.

$pattern = '/a.*?b/';
$string = 'abcdef';
preg_match($pattern, $string, $matches);
var_dump($matches[0]);  // 输出'ab'
  1. HTML 줄 바꿈 태그
    웹페이지 콘텐츠를 추출할 때 HTML 태그에 줄 바꿈이 포함된 경우가 종종 있습니다. 개행 문자가 포함된 콘텐츠를 일치시키기 위해 정규식 패턴에 s 수정자를 추가할 수 있습니다:
$pattern = '/<p>(.*)</p>/s';
$string = '<p>This is a paragraph.</p>
           <p>This is another paragraph.</p>';
preg_match_all($pattern, $string, $matches);
var_dump($matches[1]);  // 输出两个段落的内容

요약:
이 기사의 소개를 통해 정규식을 사용하여 PHP 메서드에서 웹 콘텐츠를 추출하는 방법을 배웠습니다. 정규식은 필요한 정보를 효율적으로 추출하기 위한 매우 강력한 도구입니다. 이 내용이 귀하의 웹 크롤러 개발에 도움이 되기를 바랍니다.

위 내용은 phpSpider进阶指南:如何利用正则表达式提取网页内容?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:다음 기사: