>백엔드 개발 >PHP 튜토리얼 >PHP 정규식 학습 Notes_php 기술

PHP 정규식 학습 Notes_php 기술

WBOY
WBOY원래의
2016-05-16 20:04:491368검색

PHP 정규식 학습 노트 공유:

1. 정규식을 만듭니다

$regex = '/d/i';
여기서 단어가 문자열이라는 점을 제외하면 JavaScript의 첫 번째 방법과 약간 비슷합니다.

2. 정규식의 특수문자

특수 문자에는 . * ? [ ^ ] $ ( ) { } >

3. 정규식의 함수

8가지 방법이 있습니다preg_match 및 preg_match_all, preg_replace 및 preg_replace_callback, preg_grep, preg_split, preg_last_error 및 preg_quote.

preg_match:

정규식 일치 수행

패턴 일치 개수를 반환합니다

. preg_match()는

의 첫 번째 일치 이후 검색을 중지하므로 해당 값은 0번(일치 없음) 또는 1번입니다.

위의 예제 코드는 "PREG_OFFSET_CAPTURE" 매개변수를 추가합니다. 이 경우 $matches에 오프셋 숫자가 하나 더 있습니다. 예를 들어 다음 "2"
$subject = "dd133aa2";
$pattern = '/\d+/';
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE);
print_r($matches);

preg_match_all:

"전역" 정규식 일치 수행

전체 일치 수(0일 수도 있음)를 반환하거나, 오류가 발생하면 FALSE를 반환합니다.

아래 코드의 $subject 및 $pattern은 위와 동일하며, 유일한 차이점은 preg_match가 preg_match_all로 대체된다는 점입니다.

반환된 횟수는 2이고, $matches 배열의 입력을 보면 2개가 있습니다. 위의 것보다 하나 더 있습니다.
preg_match_all($pattern, $subject, $matches, PREG_OFFSET_CAPTURE);
print_r($matches);

preg_replace:

정규식 검색 및 바꾸기 수행

subject가 배열이면 preg_replace()는 배열을 반환하고, 그렇지 않으면 문자열을 반환합니다.

일치하는 항목이 있으면 대체된 제목이 반환되고, 그렇지 않으면 변경되지 않은 제목이 반환됩니다. 오류가 발생하면 NULL이 반환됩니다.

코드에서 $subject는 두 개의 문자열 세트로 구성된 배열입니다. 다음으로 여러 숫자는 대문자 "Z"로 대체됩니다.

$subject = array("dd133aa2", "kk1ff3");
$pattern = '/\d+/';
$result = preg_replace($pattern, 'Z', $subject);
print_r($result);

preg_replace_callback:

정규식 검색을 수행하고 "콜백"을 사용하여 바꿉니다.

대체 문자열을 계산하기 위해 대체 대신 콜백을 지정할 수 있다는 점을 제외하면 이 함수의 동작은 반환된 결과를 포함한 다른 측면에서 preg_replace()와 동일합니다.

다음 코드도 대문자 "Z"로 대체됩니다. 콜백 함수의 각 $matches 내용은 코드에서 주석 처리된 부분입니다. 첫 번째는 133이고 두 번째는 2입니다.

$subject = "dd133aa2";
$pattern = '/\d+/';
$result = preg_replace_callback($pattern, function($matches) {
    //$matches [0] => 133
    //$matches [0] => 2
    return 'Z';
   }, $subject);
print_r($result); 
preg_grep:

패턴과 일치하는 배열 항목을 반환합니다

입력의 키를 로 사용하여 인덱싱된 배열

을 반환합니다.

아래 샘플 코드에서는 $subject 배열에 숫자가 포함되지 않은 "ddsdfd"를 추가했습니다. 매칭을 수행할 때 숫자가 없는 항목을 필터링했습니다.

$result2가 출력하는 것은 정반대입니다. 필터링된 것을 출력하지만 키는 여전히 0이 아니라 2입니다.


preg_split:

通过一个正则表达式分隔字符串

 

返回一个使用 pattern 边界分隔 subject 后得到 的子串组成的数组。

下面代码中,我将$pattern中的表达式加了括号,为了在$result2中捕获到。

$subject = "dd133aa2cc";
$pattern = '/(\d+)/';
$result = preg_split($pattern, $subject);
$result2 = preg_split($pattern, $subject, null, PREG_SPLIT_DELIM_CAPTURE);
print_r($result);
print_r($result2);


preg_last_error:

返回最后一个PCRE正则执行产生的错误代码

preg_match('/(&#63;:\D+|<\d+>)*[!&#63;]/', 'foobar foobar foobar');
$result = preg_last_error();//PREG_BACKTRACK_LIMIT_ERROR 调用回溯限制超出
print_r($result);

preg_quote:

转义正则表达式字符

返回转义后的字符串

下面的代码中,$subject中有两个需要转义的字符,“.”和“?”。

将$result打印出后是“dd\.a\?a2cc”,而在$result2中,多加了个参数“a”,这样的话“a”也会被转义,“dd\.\a\?\a2cc”

$subject = "dd.a&#63;a2cc";
$result = preg_quote($subject);
$result2 = preg_quote($subject, 'a');
print_r($result);
print_r($result2);

4、模式修正符

以上就是关于php正则表达式的全部内容介绍,希望对大家的学习有所帮助。

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