>백엔드 개발 >PHP 튜토리얼 >php: preg_match 및 preg_match_all 사용 예 비교

php: preg_match 및 preg_match_all 사용 예 비교

伊谢尔伦
伊谢尔伦원래의
2017-06-24 15:35:331837검색

PHP에서 정규 표현식 적용

PHP 응용 프로그램에서 정규 표현식은 주로 다음 용도로 사용됩니다.
•정규 일치: 정규 표현식을 기반으로 해당 콘텐츠 일치
•정규 대체: 정규 표현식 기반 콘텐츠 일치
•정규 분할: 정규식에 따라 문자열을 분할합니다
PHP에는 두 가지 유형의 정규식 함수가 있습니다. 하나는 Perl 호환 정규식 함수이고 다른 하나는 POSIX 확장 정규식 함수입니다. 둘 사이에는 큰 차이가 없으며 Perl 호환 정규식 함수를 사용하는 것이 권장되므로 다음에서는 Perl 호환 정규식 함수를 예로 들어 설명합니다.
Delimiter
Perl 호환 모드 정규식 함수의 정규식은 구분 기호로 작성되어야 합니다. 문자, 숫자 또는 백슬래시()가 아닌 모든 문자를 구분 기호로 사용할 수 있습니다. 일반적으로 /를 구분 기호로 사용합니다. 구체적인 사용법은 아래 예를 참조하세요.
Tips
정규 표현식은 매우 강력하지만 일반 문자열 처리 함수로 완성할 수 있다면 정규 표현식 기능을 사용하지 않는 것이 좋습니다. 정규 표현식의 효율성이 훨씬 떨어지기 때문입니다. 일반적인 문자열 처리 기능에 대해.
preg_match()
preg_match() 함수는 정규식 일치에 사용되며, 성공하면 1을 반환하고 그렇지 않으면 0을 반환합니다.
구문:
int preg_match( 문자열 패턴, 문자열 주제 [, 배열 일치 ] )
매개변수 설명:

매개변수 설명
pattern 정규 표현식
subject 검색된
matches 선택 사항, 일치하는 결과를 저장하는 array인 $matches[0]에는 전체 패턴과 일치하는 텍스트인 $matches[가 포함됩니다. 1]에는 대괄호 안의 첫 번째 캡처된 하위 패턴과 일치하는 텍스트가 포함됩니다.

예 1:

<?php
if(preg_match("/php/i", "PHP is the web scripting language of choice.", $matches)){
    print "A match was found:". $matches[0];
} else {
    print "A match was not found.";
}
?>

브라우저 출력:

A match was found: PHP

이 예에서는 i 수정자를 사용하기 때문에 따라서 PHP의 텍스트는 대소문자를 구분하지 않고 일치합니다.
Tips
preg_match()는 첫 번째 일치가 성공한 후 일치를 중지합니다. 모든 결과를 일치시키려면, 즉 제목 끝까지 검색하려면 preg_match_all() 함수를 사용해야 합니다.
예 2, URL에서 호스트 도메인 이름 가져오기:

<?php
// 从 URL 中取得主机名
preg_match("/^(http://)?([^/]+)/i","http://www.php.cn/index.html", $matches);
$host = $matches[2];
// 从主机名中取得后面两段
preg_match("/[^./]+.[^./]+$/", $host, $matches);
echo "域名为:{$matches[0]}";
?>

브라우저 출력:

도메인 이름은: php.cn


preg_match_all()
preg_match_all() function 정규식의 전역 일치의 경우 전체 패턴이 일치하는 횟수가 성공적으로 반환되고(0일 수도 있음) 오류가 발생하면 FALSE가 반환됩니다.
구문: ​​
int preg_match_all( 문자열 패턴, 문자열 제목, 배열 일치 [, int 플래그 ] )
매개변수 설명:

매개변수 Description
pattern 정규 표현식 수식
subject 일치하고 검색해야 하는 개체
matches 일치 결과를 저장하는 배열
flags

선택 사항, 일치 결과가 일치 항목에 배치되는 순서를 지정합니다. 사용 가능한 플래그는 다음과 같습니다.

  1. PREG_PATTERN_ORDER: 기본적으로 결과는 $matches[0]가 모든 패턴 일치의 배열이고 $matches[1]이 하위 패턴과 일치하는 문자열의 배열이 되도록 정렬됩니다. 첫 번째 대괄호. 유추

  2. PREG_SET_ORDER: $matches[0]가 첫 번째 일치 집합의 배열이고, $matches[1]이 두 번째 일치 집합의 배열이 되도록 결과를 정렬합니다

  3. PREG_OFFSET_CAPTURE: 고정 텍스트 태그를 설정하고 일치하는 결과가 나타날 때마다 관련 문자열 오프셋도 반환됩니다.

다음 예에서는 모든 e03b848252eb9375d56be284e690e873bc5574f69a0cba105bc93bd3dc13c4ec 텍스트의 태그 키워드(php)는 빨간색으로 표시됩니다.


<?php
$str = "<pre class="brush:php;toolbar:false">学习php是一件快乐的事。
所有的phper需要共同努力!
"; $kw = "php"; preg_match_all('/
([sS]*?)
/',$str,$mat); for($i=0;$i'.$kw.'', $mat[0][$i]); $str = str_replace($mat[1][$i], $mat[0][$i], $str); } echo $str; ?>

정기 매칭 한자
정기 매칭 한자는 페이지 인코딩에 따라 조금씩 다릅니다:
•GBK/GB2312 인코딩: [x80-xff>]+ 또는 [xa1-xff]+
•UTF-8 인코딩: [x{4e00}-x{9fa5}]+/u
예:

<?php
$str = "学习php是一件快乐的事。";
preg_match_all("/[x80-xff]+/", $str, $match);
//UTF-8 使用:
//preg_match_all("/[x{4e00}-x{9fa5}]+/u", $str, $match);
print_r($match);
?>

출력:

Array
(
    [0] => Array
        (
            [0] => 学习
            [1] => 是一件快乐的事。
        )
)


위 내용은 php: preg_match 및 preg_match_all 사용 예 비교의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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