PHP 초보자를 위한 정규식LOGIN

PHP 초보자를 위한 정규식

1.구분자

구분자란 무엇인가요?

구분자라는 것은 경계를 정하는 것이고, 그 경계 안에 내용을 써야 합니다

// 정규식에서의 구분자입니다. 표현은 중간에 써야 합니다. of // 🎜>

즉, /a-z/

2.

의 구분 기호는 무엇인가요?

문자, 숫자, 백슬래시를 제외한 모든 문자는 |, //, {}, !! 등과 같이 구분 기호가 될 수 있습니다. 특수 필요한 경우 구분 기호를 모두 정규식으로 사용합니다

3.

정규식의 구성

표준 정규식은 세 부분으로 구성됩니다.

(1). 구분 기호

(2). 수식

(3). 구분 기호

: 구분 기호를 사용합니다. 특수 문자를 제외한 모든 문자가 될 수 있는 표현식입니다. 일반적으로 사용되는 구분 기호 "/"

Expression: 표현식은 일부 특수 문자(메타 문자)와 특수 문자가 아닌 문자( 텍스트 문자) 양식

수정자: PHP 정규식의 수정자는 정규식의 많은 특성을 변경하여 정규식을 사용자의 요구에 더 적합하게 만들 수 있습니다(참고: 수정자는 대소문자를 구분합니다. "e"는 "E"와 동일하지 않습니다.)

정규 표현식의 수식어는 무엇인가요?

PHP 정규 표현식 수식어 유형 및 소개: ◆i: 수식어에 "i"가 추가되면 정규 표현식은 대소문자를 취소합니다. "a"와 "A"는 같습니다.

◆m: 기본 일반 시작 "^"과 끝 "$"는 일반 문자열에만 적용됩니다. "m"이 수정자에 추가되면 시작과 끝은 문자열의 각 줄을 참조합니다. : 각 줄의 시작은 "^"이고 끝은 "$"입니다.

◆s: "s"가 수식어에 추가되면 기본 "."은 개행 문자를 제외한 모든 문자가 개행 문자를 포함한 모든 문자가 된다는 의미입니다!

◆x: 이 수정자를 추가하면 표현식의 공백 문자가 이스케이프되지 않는 한 무시됩니다.

◆e: 이 수정자는 교체에만 유용합니다. 즉, 교체 시 PHP 코드로 사용된다는 의미입니다.

◆A: 이 수식어를 사용하는 경우 표현식은 일치하는 문자열의 시작이어야 합니다. 예를 들어 "/a/A"는 "abcd"와 일치합니다.

◆E: "m"과 달리 이 수정자를 사용하면 "$"는 개행 문자 앞이 아닌 문자열의 절대 끝과 일치합니다. 이 모드는 기본적으로 켜져 있습니다.

◆U: 물음표와 같은 기능을 가지고 있으며, "탐욕 모드"를 설정하는 데 사용됩니다.

정규식의 원자

원자는 정규식에서 가장 작은 단위입니다. 일치합니다. 유효한 정규 표현식에는 하나 이상의 원자가 포함되어야 합니다.

설명: 우리가 보는 공백, 캐리지 리턴, 줄 바꿈, 0-9, A-Za-z, 중국어, 구두점 및 특수 기호는 모두 원자입니다. 원자적 예제를 수행하기 전에 먼저 preg_match

함수에 대해 설명하겠습니다. 구문: int preg_match ( string $regular, string $string[, array &$result] )

위는 preg_match 여러 개입니다. 일반적으로 사용되는 주요 매개 변수. 위에는 다른 여러 매개변수를 나열하지 않았습니다. 다른 두 매개변수는 너무 드물기 때문입니다.

실험을 통해 증명해 보겠습니다.

<?php
	header("Content-type: text/html; charset=utf-8");//设置编码
	$zz = '/a/';

	$string = 'ddfdjjvai2jfvkwkfi24';

	if(preg_match($zz, $string, $matches)){
	    echo '匹配到了,结果为:';
	    var_dump($matches);
	}else{
	    echo '没有匹配到';
	}
?>

참고: $zz는 정규식 규칙입니다. $string은 문자열입니다. 이 예는 이 문자열이 일치하는 정규식을 만족하는지 확인하는 것입니다. 만족하면 결과가 출력됩니다.

특별히 식별된 원자

图片1.png

d 0~9와 일치

<?php
	header("Content-type: text/html; charset=utf-8");//设置编码

	//   \d的用法

	$zz = '/\d/';
	$string = '我爱喝9你爱不爱喝';

	if(preg_match($zz, $string, $matches)){
	    echo '匹配到了,结果为:';
	    var_dump($matches);
	}else{
	    echo '没有匹配到';
	}
?>

D 0~9를 제외한 모든 문자

<?php
    //  \D   匹配出0-9以外的所有字符
	$zz = '/\D/';
	$string = '12124323453453';

	if(preg_match($zz, $string, $matches)){
	    echo '匹配到了,结果为:';
	    var_dump($matches);
	}else{
	    echo '没有匹配到';
	}
?>

w a-z A-Z0-9_

<?php 
	//  \w   匹配a-zA-Z0-9 还有下划线

	$zz = '/\w/';  
	$string = '新中_国万岁呀万岁';
	if(preg_match($zz, $string, $matches)){
	    echo '匹配到了,结果为:';
	    var_dump($matches);
	}else{
	    echo '没有匹配到';
	}
?>

W w의 반대

<?php
    //\W  除a-zA-Z0-9_ 以外的所有字符

	$zz = '/\W/';  
	$string = '......';

	if(preg_match($zz, $string, $matches)){
	    echo '匹配到了,结果为:';
	    var_dump($matches);
	}else{
	    echo '没有匹配到';
	}
?>

s는 모든 공백 문자와 일치합니다

<?php
        //  \s  匹配所有的空白字符
	$zz = '/\s/';
	$string = "中国万
	岁";

	if(preg_match($zz, $string, $matches)){
	    echo '匹配到了,结果为:';
	    var_dump($matches);
	}else{
	    echo '没有匹配到';
	}
?>

S개의 비어 있지 않은 문자

<?php
	//  \S  匹配非空字符
	$zz = '/\S/';
	$string = "        
          a       ";

	if(preg_match($zz, $string, $matches)){
	    echo '匹配到了,结果为:';
	    var_dump($matches);
	}else{
	    echo '没有匹配到';
	}
?>

[] 지정된 원자 범위

<?php
	//  [] 指定原子范围
	$zz = '/[0-5]\w+/';
	$string = '6a';
	$string1 = '1C';
	if(preg_match($zz, $string, $matches)){
	    echo '匹配到了,结果为:';
	    var_dump($matches);
	}else{
	    echo '没有匹配到';
	}

?>

이 w s W S 를 기억하기 어렵습니다. 아래에 상응하는 것이 있고, 효과는 s w 등과 동일합니다.

图片2.png

+ 이전 문자와 최소 한 번 이상 일치합니다.

<?php
	header("Content-type: text/html; charset=utf-8");//设置编码

	$zz = '/\d+/';

	$string = "迪奥和奥迪250都是我最爱";
	//待会儿再试试中间没有0-9的情况
	//$string = "迪奥和奥迪都是我最爱";

	if(preg_match($zz, $string, $matches)){
	    echo '匹配到了,结果为:';
	    var_dump($matches);
	}else{
	    echo '没有匹配到';
	}
?>

* 이전 문자가 0번 또는 임의 개수 일치

<?php
	$zz = '/\w*/';
	$string = "!@!@!!@#@!$@#!";
	//待会儿再试试中间没有0-9的情况
	//$string1 = "!@#!@#!abcABC#@#!";
	if(preg_match($zz, $string, $matches)){
	    echo '匹配到了,结果为:';
	    var_dump($matches);
	}else{
	    echo '没有匹配到';
	}
?>

? 1번, 선택사항

<?php
    $zz = '/ABC\d?ABC/';
	$string = "ABC1ABC";
	//待会儿再试试中间没有0-9的情况
	//$string1 = "ABC888888ABC";
	//$string2 = "ABCABC";
	if(preg_match($zz, $string, $matches)){
	    echo '匹配到了,结果为:';
	    var_dump($matches);
	}else{
	    echo '没有匹配到';
	}
?>

. (점)은 n

<?php
    
	$zz = '/gg.+gg/';
	$string = "ABC1ABC";
	if(preg_match($zz, $string, $matches)){
	    echo '匹配到了,结果为:';
	    var_dump($matches);
	}else{
	    echo '没有匹配到';
	}
?>

<🎜을 제외한 모든 문자와 일치합니다. >|(세로 막대) 또는 가장 낮은 우선순위

<?php
        $zz = '/abc|bcd/';
	$string1 = "abccd";
	$string2 = "ggggbcd";

	if (preg_match($zz, $string1, $matches)) {
	    echo '匹配到了,结果为:';
	    var_dump($matches);
	} else {
	    echo '没有匹配到';
	}
?>

위의 예를 통해 다음을 확인할 수 있습니다.

1. abccd 또는 abbcd와 일치합니다. 그러나 $string1과 $string2가 일치하는 경우 일치하는 결과는 abc 및 bcd입니다.

2. 구현 또는 일치하는 경우 일치하는 결과는 abc 또는 bcd입니다. 연속된 문자열보다 우선순위가 높지 않습니다

^(circumflex), ^

<?php
	$zz = '/^张杰好帅\w+/';
	$string1 = "张杰好帅abccdaaaasds";
	//$string2没有以张杰好帅开始
	$string2 = "帅abccdaaaasds";
	if (preg_match($zz, $string1, $matches)) {
	    echo '匹配到了,结果为:';
	    var_dump($matches);
	} else {
	    echo '没有匹配到';
	}
?>

뒤의 문자열로 시작해야 합니다. 실험을 통해 다음과 같은 결론을 얻었습니다.

1 . $string1은 성공적으로 일치했지만 $string2는 성공적으로 일치하지 않았습니다.

2. $string1이 지정된 문자

로 시작하고 $string2는 ^

< 이후의 문자로 시작하지 않기 때문입니다. 🎜>4. 이 정규식의 번역은 "Li Wenkai is so handsome"으로 시작하고 그 뒤에 최소한 하나의 문자 a-zA-Z0-9_가 오는 것을 의미합니다.

$(달러 기호)는 $

<?php
	$zz = '/\d+努力$/';
	$string1 = "12321124333努力";
	//$string2
	$string2 = "12311124112313力";

	if (preg_match($zz, $string1, $matches)) {
	    echo '匹配到了,结果为:';
	    var_dump($matches);
	} else {
	    echo '没有匹配到';
	}
?>

앞의 문자로 끝나야 합니다. 참고:

$string1이 성공적으로 일치했습니다. $string2 일치는 실패합니다.

$ 앞의 문자는 d+이고 그 뒤에 중국어가 있습니다.

그러므로 경기는 이번 경기입니다. d는 0부터 9까지의 정수형을 나타내며, + 기호는 0~9 중 하나 이상을 나타냅니다

{m}는 m번만 나타날 수 있습니다

<?php
	$zz = '/喝\d{1,3}酒/';
	$string1 = "喝9酒";
	//$string2 = "喝988酒";
	if (preg_match($zz, $string1, $matches)) {
	    echo '匹配到了,结果为:';
	    var_dump($matches);
	} else {
	    echo '没有匹配到';
	}
?>

참고:

위의 예 d{1,3}에서는 0-9가 한 번, 두 번 또는 세 번만 나타날 수 있도록 지정했습니다. 그 외 시간은 모두 틀립니다

{m,} m회 이상, 최대 횟수 제한은 없습니다

<?php
    	$zz = '/喝\d{2,}/';
	$string1 = "喝9";
	//$string2 = "喝98";
	//$string3 = "喝98122121";
	if (preg_match($zz, $string1, $matches)) {
	    echo '匹配到了,结果为:';
	    var_dump($matches);
	} else {
	    echo '没有匹配到';
	}
?>

위 예시 d{2,}에서는 음료 뒤의 0~9가 최소 2회 이상 나와야 하며, 최대 횟수는 나오지 않도록 규정하고 있습니다. 제한된. 따라서 $string1은 일치에 실패하고 $string2는 성공적으로 일치됩니다. $string3은 일치 성공

정규 표현 기술

조금 작성하고 약간 테스트

지속적인 정규화가 필요하므로 preg_match를 사용합니다. 비교가 성공했습니다. 성공하면 다음 포인트를 쓰자. 글쓰기를 마치고 모든 경기가 성공할 때까지!

다음으로 이메일용 정규식의 통합된 예를 작성해 보겠습니다.

1단계: 모든 이메일 형식 나열

liwenkai@phpxy.com

iwenkai@ corp.baidu.cm

iwenkai@126.com

_w_k@xxx.com

2345@qq.com

먼저 w+ 이전 문자와 일치 @(0-9A-Za-z_이기 때문입니다)

두 번째 뒤에 @ 문자가 옵니다

세 번째는 [a-zA-Z0-9 -]+로 씁니다. 왜냐하면 qq, 126 등의 주요 도메인 이름에는

밑줄 친

corp.baidu를 사용할 수 없기 때문입니다. 보통 이메일 접미사는 이렇습니다. 따라서 다음과 같이 작성할 수 있습니다. ([a-zA-Z0-9-]+.){1,2}

위는 이스케이프하여 고유한 의미를 갖습니다. 대괄호는 최소 한 번, 최대 두 번 반복되어야 합니다.

com|cn|org|gov.cn|net|edu.cn 등을 팔로우하세요

<?php
	header("Content-type: text/html; charset=utf-8");//设置编码

	$zz = '/\w+@([a-zA-Z0-9-]+.){1,2}(com|cn|org|gov.cn|net|edu.cn)/';

	$string1 = "k53981@qq.com";


	if (preg_match($zz, $string1, $matches)) {
	    echo '匹配到了,结果为:';
	    var_dump($matches);
	} else {
	    echo '没有匹配到';
	}

?>


다음 섹션

<?php header("Content-type: text/html; charset=utf-8");//设置编码 $zz = '/a/'; $string = 'ddfdjjvai2jfvkwkfi24'; if(preg_match($zz, $string, $matches)){ echo '匹配到了,结果为:'; var_dump($matches); }else{ echo '没有匹配到'; } ?>
코스웨어