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 여러 개입니다. 일반적으로 사용되는 주요 매개 변수. 위에는 다른 여러 매개변수를 나열하지 않았습니다. 다른 두 매개변수는 너무 드물기 때문입니다. 실험을 통해 증명해 보겠습니다. 참고: $zz는 정규식 규칙입니다. $string은 문자열입니다. 이 예는 이 문자열이 일치하는 정규식을 만족하는지 확인하는 것입니다. 만족하면 결과가 출력됩니다. 특별히 식별된 원자 d 0~9와 일치 D 0~9를 제외한 모든 문자 w a-z A-Z0-9_ W w의 반대 s는 모든 공백 문자와 일치합니다 S개의 비어 있지 않은 문자 [] 지정된 원자 범위 이 w s W S 를 기억하기 어렵습니다. 아래에 상응하는 것이 있고, 효과는 s w 등과 동일합니다. + 이전 문자와 최소 한 번 이상 일치합니다. * 이전 문자가 0번 또는 임의 개수 일치 ? 1번, 선택사항 . (점)은 n <🎜을 제외한 모든 문자와 일치합니다. >|(세로 막대) 또는 가장 낮은 우선순위 <?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 '没有匹配到';
}
?>
<?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 '没有匹配到';
}
?>
<?php
// \D 匹配出0-9以外的所有字符
$zz = '/\D/';
$string = '12124323453453';
if(preg_match($zz, $string, $matches)){
echo '匹配到了,结果为:';
var_dump($matches);
}else{
echo '没有匹配到';
}
?>
<?php
// \w 匹配a-zA-Z0-9 还有下划线
$zz = '/\w/';
$string = '新中_国万岁呀万岁';
if(preg_match($zz, $string, $matches)){
echo '匹配到了,结果为:';
var_dump($matches);
}else{
echo '没有匹配到';
}
?>
<?php
//\W 除a-zA-Z0-9_ 以外的所有字符
$zz = '/\W/';
$string = '......';
if(preg_match($zz, $string, $matches)){
echo '匹配到了,结果为:';
var_dump($matches);
}else{
echo '没有匹配到';
}
?>
<?php
// \s 匹配所有的空白字符
$zz = '/\s/';
$string = "中国万
岁";
if(preg_match($zz, $string, $matches)){
echo '匹配到了,结果为:';
var_dump($matches);
}else{
echo '没有匹配到';
}
?>
<?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 '没有匹配到';
}
?>
<?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 '没有匹配到';
}
?>
<?php
$zz = '/\w*/';
$string = "!@!@!!@#@!$@#!";
//待会儿再试试中间没有0-9的情况
//$string1 = "!@#!@#!abcABC#@#!";
if(preg_match($zz, $string, $matches)){
echo '匹配到了,结果为:';
var_dump($matches);
}else{
echo '没有匹配到';
}
?>
<?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 '没有匹配到';
}
?>
<?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 '没有匹配到';
}
?>
^(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.comiwenkai@ corp.baidu.cmiwenkai@126.com_w_k@xxx.com2345@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 '没有匹配到'; } ?>