정규식 언어는 리터럴(일반) 텍스트 문자와 메타 문자라는 두 가지 기본 문자 유형으로 구성됩니다.
관련 권장사항:
1. 정규식 구문 튜토리얼(온라인 테스트 도구 포함)
2. PHP 정규식 빠른 입력 비디오 튜토리얼
메타 문자에는 정규식을 사용한 처리 기능이 있습니다. 메타 문자는 [ ]
에 있는 단일 문자일 수 있습니다(예: [a]
는 단일 소문자 a
와 일치함을 의미함). 문자 시퀀스(예: [a-d]
는 a, b, c, d
사이의 모든 문자와 일치함을 의미하고 w
는 모든 영어 문자, 숫자를 의미함) 및 밑줄), 일반적인 메타 문자는 다음과 같습니다: [ ]
中的任意单个字符(如 [a]
表示匹配单个小写字符 a
),也可以是字符序列(如 [a-d]
表示匹配 a 、b、 c、 d
之间的任意一个字符,而 w
表示任意英文字母和数字及下划线),常见的元字符如下:
常见的元字符
字符 |
描述 |
特别说明 |
. |
匹配除换行符(n )以外的任意字符 |
~ |
[abcde] |
匹配 a b c d e 之中的任意一个字符 |
所有字符是 或 的关系 |
[a-h] |
匹配 a 到h 之间的任意一个字符 |
~ |
[^fgh] |
不与 fgh 之中的任意一个字符匹配 |
在 中括号[ ] 的第一个字符前加上 ^ 表示 取反 不匹配中括号里面出现的任意字符 |
w |
匹配大小写英文字符及数字 0 到 9 之间的任意一个及下划线,相当于[a-zA-Z0-9_]
|
~ |
W |
与 w 相反,相当于 [^a-zA-Z0-9_]
|
~ |
s |
匹配任意的空白符,相当于 [fnrtv]
|
~ |
S |
与 s 相反,相当于 [^s]
|
~ |
d |
匹配任何 0 到 9 之间的单个数字,相当于 [0-9]
|
~ |
D |
与 d 相反,相当于[^0-9]
|
~ |
[u4e00-u9fa5] |
匹配任意单个汉字(中文)(这里用的是 Unicode 编码表示的汉字) |
~ |
b |
匹配单词的开始或结束 |
~ |
^ |
匹配字符串的开始 |
放在中括号的第一个字符前 则变为 取反的意思 |
$ |
匹配字符串的结束 |
~ |
正则表达式限定符
作用:限定这个符号前面 一个 单元 多出现的次数
单元:
- 如果前面出现的是一个字符的话,则这一个字符就为一个 单元
- 如果前面我们用小括号把一个很长的字符串括起来的话,那么整个小括号里面都算是一个 单元
上面的元字符都是针对单个字符匹配的,要想同时匹配多个字符的话,还需要借助限定符,下面是一些常见的限定符(下表中 n
和 m 都是表示 整数。)
字符 |
描述 |
特别说明 |
* |
匹配 0 到 多 个元字符,相当于 {0,}
|
~ |
? |
匹配 0 到 1 个元字符, 相当于 {0,1}
|
~ |
+ |
匹配至少 1 个元字符,相当于 {1,}
|
~ |
{n} |
匹配 n 个元字符 |
~ |
{n,} |
匹配至少 n 个元字符 |
~ |
{n,m} |
匹配 n 到 m 个元字符 |
~ |
b |
匹配单词边界 |
~ |
^ |
字符串必须以指定的字符开始 |
~ |
$ 공통 메타 문자
문자 |
설명 | 특별 지침 |
. |
개행 문자를 제외하고 일치(n ) |
를 제외한 모든 문자 ~
|
🎜[abcde]
🎜🎜는 a b c d e
중 임의의 문자와 일치합니다. 🎜🎜모든 문자는 또는 🎜🎜🎜<code>[a-h]
🎜🎜는 a
와 h
🎜🎜~ 🎜🎜
🎜[^ 사이의 모든 문자와 일치합니다. fgh]
🎜🎜는 괄호 [ ]
안의 fgh
🎜🎜에 있는 어떤 문자와도 일치하지 않습니다. 표시할 첫 번째 문자 앞에 ^
를 추가하세요. reverse 🎜 대괄호 안에 표시되는 문자와 일치하지 않습니다. 🎜🎜
🎜w
🎜🎜대문자 및 소문자 영어 문자, 0~9 사이의 숫자 및 밑줄과 일치합니다. , [a-zA-Z0-9_]
🎜🎜~🎜🎜
🎜 W
🎜🎜와 동일하며 w
의 반대입니다. [^a-zA-Z0-9_]
🎜🎜~🎜🎜
🎜s
🎜🎜와 동일하며 와 동일하게 모든 공백 문자와 일치합니다. [fnrtv]
🎜🎜~🎜🎜
🎜S
🎜🎜 및 s code>대신 <code>[^s]
와 동일 🎜🎜~🎜🎜
🎜d
🎜🎜는 0에서 9 사이의 단일 숫자와 일치하며 [0-9]
🎜🎜~🎜🎜
과 동일합니다. 🎜D
🎜🎜는 d
의 반대이며 [^0- 9]
🎜🎜~🎜🎜
🎜[u4e00-u9fa5]
🎜🎜는 단일 한자(중국어)와 일치합니다(유니코드 인코딩으로 표시되는 한자)🎜🎜~🎜🎜
🎜b
🎜🎜단어의 시작 또는 끝과 일치🎜🎜~🎜🎜
🎜^🎜🎜일치하는 문자열🎜🎜의 시작은 다음과 같습니다. <strong>reverse</strong>🎜🎜<tr>🎜<code>$
를 의미하는 대괄호의 첫 번째 문자 앞에 배치됩니다. 🎜🎜문자열의 끝 부분과 일치🎜🎜~🎜🎜🎜🎜정규 표현식 한정자🎜함수: 이 기호 앞의 단위 발생 횟수를 제한합니다.🎜 단위:🎜
- 문자 앞에 나타나면 이 문자는 단위입니다.
- 앞에 괄호를 사용하는 경우 매우 긴 문자열을 묶으면 전체 괄호가 단위
🎜위의 메타 문자는 모두 단일 문자와 일치합니다. 동시에 여러 문자를 일치시키려면 다음과 같은 몇 가지 공통 한정자를 사용해야 합니다. (아래 표의 n
과 m은 모두 정수를 나타냅니다. )🎜
캐릭터 |
설명 |
특별 지침 | 🎜
🎜*
🎜🎜는 0과 여러 메타 문자를 일치시킵니다. 이는 {0,}
🎜🎜~🎜🎜🎜?
🎜와 동일합니다. 🎜는 {0,1}
🎜🎜~🎜🎜
🎜+
🎜🎜에 해당하는 0~1개의 메타 문자와 일치하며 {1,}
🎜🎜~🎜🎜
🎜{n}
🎜🎜는 n개의 메타문자와 일치 🎜🎜~🎜🎜
🎜{n,}🎜🎜n개 이상의 메타문자와 일치🎜🎜~🎜🎜
🎜{n,m}
🎜🎜n~m개의 메타문자와 일치🎜🎜 ~🎜🎜
🎜 b
🎜🎜단어 경계 일치🎜🎜~🎜🎜
🎜^
🎜🎜문자열은 지정된 문자로 시작해야 합니다🎜🎜~ 🎜🎜
🎜$
🎜🎜문자열은 지정된 문자🎜🎜~🎜🎜🎜🎜로 끝나야 합니다.설명 - 특수 사례
- 여러 메타 문자 또는 리터럴 텍스트 문자를 괄호로 묶어
그룹
을 형성할 수 있습니다(예: ^(13)[4-9 ]). d{8}$
는 13으로 시작하는 모든 휴대전화 번호를 나타냅니다. 分组
,比如 ^(13)[4-9]d{8}$
表示任意以 13 开头的移动手机号码。
-
abcabcabc+
表示 最后的字母 c
出现 1 次或 多次;
-
(abcabcabc)+
表示 整个字符串 abcabcabc
出现 1 次或 多次。
- 可以使用
|
来表示 或
的关系,例如 z|j|q
表示匹配 z 、j、q
之中的任意一个字母。其实等价于 [zjq]
。
-
ab|cd|ef
表示的是:要么是 ab
、要么是 cd
要么是 ef
。
-
a(b|cd|e)f
表示的是:以a
开头,要么是 b
、要么是 cd
要么是 e
,最后以f
结尾。
- 总结:
|
(或
) 的唯一边界是 小括号(( )
)
-
[0-9A-Z.?]
这个正则你如何理解?
- 当
.
和 ?
出现在中括号中时,.
和 ?
将变为 普通字符,它就是 点 和 问号。你可以理解为 [ ]
的优先级要大于. 和 ?
的优先级。
- 此正则表达式将会完全匹配字符串
?aaa.bbb
,记住这里 . 和 ?
被完全当做了普通字符。
高级1 - 多选结构
多选结构其实就是元字符 |
(或)的使用。
界定范围:开头、结尾、小括号
正则 |
含义 |
Windows98|Windows2000|WindowsXP |
匹配Windows98 或者Windows2000 或者WindowsXP
|
^Windows98|Windows2000|WindowsXP$ |
以Windows98 开头或者包含Windows2000 或者以WindowsXP结尾 注意^ 和$ 都包含在| 的范围内,因为| 的界限只有:开头、结尾、小括号 |
Windows(98|2000|XP) |
Windows 然后98 或者2000 或者XP
|
abcabcabc+
는 마지막 문자 c
가 1번 이상 나타나는 것을 의미합니다.
(abcabcabc)+
는 전체 문자열abcabcabc가 1회 이상 나타납니다. |
를 사용하여 또는
의 관계를 나타낼 수 있습니다(예: z|j|q는 <code>z, j, q
중 모든 문자와 일치함을 나타냅니다. 실제로 [zjq]
와 동일합니다.
ab|cd|ef
는 ab
, cd
또는 ef
를 의미합니다. . 🎜a(b|cd|e)f
는 a
로 시작, b
또는 cd를 의미합니다. code>는 e
이고 f
로 끝납니다. 🎜요약: |
( 또는
)의 유일한 경계는 🎜괄호(( )
)입니다.🎜[0-9A-Z.?]
이 규칙을 어떻게 이해하시나요? 🎜.
및 ?
가 🎜대괄호, .
및 안에 표시되는 경우는 무엇입니까?
는 점과 물음표로 구성된 🎜일반 문자가 됩니다. [ ]
의 우선순위가 및 ?
의 우선순위보다 높다는 것을 알 수 있습니다. 🎜이 정규식은 ?aaa.bbb
문자열과 정확히 일치합니다. 여기서 및 ?
는 완전히 일반 문자로 처리됩니다.
🎜고급 1 - 다중 선택 구조🎜다중 선택 구조는 실제로 |
메타 문자를 사용하는 것입니다. .
범위 정의: 시작, 끝, 괄호
일반 |
의미 | 🎜 thead >
Windows98|Windows2000|WindowsXP 🎜 |
는 Windows98 , Windows2000 또는 WindowsXP 🎜🎜<tr>
<td>
<code>^Windows98|Windows2000|WindowsXP$ 🎜 |
Windows98 로 시작하거나 Windows2000 을 포함하거나 WindowsXP로 종료 ^ 및 $ 는 모두 | 범위에 포함됩니다. | 유일한 경계는 시작, 끝, 괄호 🎜🎜 |
Windows(98|2000|XP) 🎜 |
Windows 다음 입니다. 98 또는 2000 또는 XP 🎜🎜🎜🎜요약: 다중 선택 구조에는 많은 문자가 포함될 수 있지만 괄호 의 경계를 초과할 수 없습니다. 括号 的界限。
高级2 - 分组与后向引用
分组
- 我们已经了解怎么重复单个字符;
- 但如果想要重复一个字符串该怎么办?你 可以用小括号来指定子表达式(也叫做分组)。
-
(d{1,3}.){3}d{1,3} 简单的 IP 地址匹配表达式
- 但是它也将匹配 256.300.888.999 这种不可能存在的 IP 地址。你能写一个更准确的正则?
((2[0-4]d|25[0-5]|[01]?dd?).){3}(2[0-4]d|25[0-5]|[01]?dd?)
反向引用
- 使用小括号指定一个子表达式(分组)后,匹配这个子表达式的文本可以被捕获,从而在表达式或其他程序中作进一步的处理。
- 默认情况下,每个分组会自动拥有一个组号,规则是:以分组的
左括号 为标志,从左向右,第一个分组的组号为 1 ,第二个为 2 ,依次类推。
示例:
-
b(w+)bs+1b 可以用来匹配重复的单词
- 匹配诸如:
where where go, tom tom happy
直白解释: 正则表达式中,前面用小括号进行划分(分组),后面把小括号匹配到的内容引用到后面来,分别用1 、2 等 来表示。(第一个小括号极1 ...)。如果存在 小括号嵌套小括号的情况 (w+(.?)) 记住:这个时候要以 ( 为标志 从左往右 数小括号就可以了。
高级3 - 环视(零宽断言)
- 环视不匹配任何字符,只匹配文本中的 特定位置。类似于
b 、^ 、$ 那样。环视不会占用字符。
- 环视分为顺序和逆序两种:
- 顺序
-
(?=exp) 位置的后面能匹配 exp 。例如:(?=d) 当前位置右边是数字。
-
(?!exp) 位置的后面不能匹配 exp 。例如:(?!d) 当前位置右边不是数字。
- 逆序
-
(?<=exp) 位置的前面能匹配 exp 。例如:(?<=d) 当前位置左边是数字
-
(?<!exp) 位置的前面不能匹配 exp 。例如:(?!d) 当前位置左边不是数字。
高级4 - 贪婪与懒惰
- 当正则表达式中包含能接受重复的 量词 (指定数量的代码,例如:
+ 、* 、{3,12} 等)时, 通常的行为是匹配尽可能多的字符。
- 正则表达式:
a.*b ,它将会匹配最长的以 a 开始,以 b 结束的字符串。如果用它来搜索 aabab 的话,它会匹配整个字符串 aabab ,这被称为 -------贪婪匹配
- -
- 我们更需要 懒惰匹配,也就是匹配尽可能少的字符,前面给出的量词都可以被转化为 懒惰匹配模式, 只要在它后面加一个问号
? 。这样 .*? 就意味着匹配任意数量的重复,但是在能使整个 匹配成功的前提下使用最少的重复。
-
a.*?b 匹配最短的,以 a 开始, 以 b 结束的字符串。如果把它应用于 aabab 的话,它会匹配 aab 和 ab 。
总结:
贪婪与懒惰模式之间的区别就在于:懒惰模式 在量词 * 的后面多了一个 问号 ? 고급 2 - 그룹화 및 역참조
그룹화
- 우리는 이미 단일 문자를 반복하는 방법을 알고 있습니다.
- 그러나 문자열을 반복하려면 무엇을 해야 할까요? 할?
괄호를 사용하여 하위 표현식(그룹화라고도 함)을 지정할 수 있습니다 .
(d{1,3}.){3}d{1,3} 간단한 IP 주소 일치 표현식
그러나 이는 또한 불가능한 IP 주소 256.300.888.999. 더 정확한 정규식을 작성할 수 있나요?
((2[0-4]d|25[0-5]|[01]?dd?).){3}(2[0-4]d|25[ 0-5]|[01]?dd?)
역참조
- 괄호를 사용하여 하위 표현식 지정( 그룹화 후 ) , 이 하위 표현식과 일치하는 텍스트는 표현식이나 다른 프로그램 내에서 추가 처리를 위해 캡처될 수 있습니다.
- 기본적으로 각 그룹에는 자동으로 그룹 번호가 있습니다. 규칙은 다음과 같습니다. 그룹의
왼쪽 대괄호 를 표시로 왼쪽에서 오른쪽으로 첫 번째 그룹 number 그룹 번호는 1, 두 번째는 2, 등등입니다🎜.
🎜🎜예: 🎜🎜
-
b(w+)bs+1b 는 반복되는 단어를 일치시키는 데 사용할 수 있습니다.
- 다음과 같은 단어와 일치 as :
where where go, tom tom happy
🎜🎜 간단한 설명: 🎜 정규 표현식에서는 괄호를 사용하여 앞 부분과 부분 부분을 구분(그룹화)합니다. back 괄호🎜에 일치하는 내용을 뒤쪽에 인용하고, 1 , 2 등을 이용하여 각각 표현합니다. (첫 번째 괄호는 1 ...)입니다. 괄호 (w+(.?)) 안에 괄호가 중첩되어 있는 경우 기억하세요: 이때 ( 를 기호로 사용하여 왼쪽에서 오른쪽으로 괄호 수를 계산하세요. 🎜🎜 고급 3 - 탐색(너비 없음 어설션) 🎜
- 탐색은 어떤 문자와도 일치하지 않으며 텍스트의 🎜특정 위치🎜만 일치합니다.
b , ^와 유사합니다. code>, <code>$ 🎜 둘러보기는 문자를 차지하지 않습니다. 🎜
- 둘러보기는 🎜순서🎜와 🎜역순🎜으로 구분됩니다.
- 순서
-
(?=exp) 는 🎜 exp 위치 뒤의 🎜와 일치할 수 있습니다. 예: (?=d) 현재. 위치의 오른쪽은 숫자입니다.
-
(?!exp) 는 🎜 exp 와 일치할 수 없습니다. 예: (?! d) 현재 위치의 오른쪽이 숫자가 아닙니다
- 역순
-
(?<=exp) 위치의 앞부분입니다. 🎜 exp 와 일치할 수 있습니다. 예: (?<=d) 현재 위치의 왼쪽은 숫자입니다 li>
-
(?<!exp). 앞의 🎜는 🎜 exp 와 일치할 수 없습니다. 예: (?!d) 현재 위치의 왼쪽은 숫자가 아닙니다.
li>
🎜고급 4 - 탐욕스럽고 게으르다🎜
- 정규 표현식에 반복을 허용하는 🎜정량자🎜가 포함된 경우(코드 수를 지정하세요. 예: +,
* , {3,12} code> 등), 🎜일반적인 동작은 가능한 한 많은 문자를 일치시키는 것입니다🎜
. - 정규식:
a.*b , 시작하는 가장 긴 문자열과 일치합니다. a 로 시작하고 b 로 끝납니다. aabab 를 검색하는 데 사용하면 전체 문자열 aabab 와 일치합니다. > -------🎜탐욕스러운 매칭🎜 - -
- 우리는 🎜지연 매칭🎜이 필요합니다. 즉, 가능한 한 적은 수의 문자를 매칭하는 것입니다. 위에 주어진 패턴은 게으른 일치 패턴으로 변환될 수 있습니다. 🎜
? 뒤에 물음표만 추가하면 됩니다 🎜. 이렇게 하면 .*? 는 반복 횟수에 관계없이 일치하지만 가장 적은 반복 🎜을 사용하여 전체 🎜 일치를 성공적으로 만드는 것을 의미합니다.
-
a.*?b 는 a 로 시작하고 b 로 끝나는 가장 짧은 문자열과 일치합니다. aabab 에 적용하면 aab 및 ab 와 일치합니다.
🎜요약: 🎜🎜그리디 모드와 게으른 모드의 차이점은 다음과 같습니다. 🎜Lazy 모드🎜 한정자 * 뒤에 추가 물음표 가 있습니까? . 🎜🎜🎜고급 5 - 패턴 매칭의 우선순위🎜🎜정규 표현식을 사용할 때는 매칭 순서에 주의해야 합니다. 일반적으로 계산은 동일한 우선순위(🎜왼쪽에서 오른쪽으로🎜)로 수행되고 연산은 서로 다른 우선순위(🎜높은 우선순위, 그 다음 낮은🎜)로 수행됩니다. 다양한 연산자의 매칭 순서 우선순위는 🎜높은 것부터 낮은 것까지🎜 아래 표와 같습니다. 🎜ㅋㅋㅋ 2
( ), (?:) , (?=) , [] 모드 단위 및 원자 테이블 |
3 |
* , + , ? , {n} , {n,} , {n,m} 중복 일치 |
4
^ , $ , b , B , A , Z
|
경계 제한
|
转义字符 |
2 |
() 、(?:) 、(?=) 、[]
|
模式单元和原子表 |
3 |
* 、+ 、? 、{n} 、{n,} 、{n,m}
|
重复匹配 |
4 |
^ 、$ 、b 、B 、A 、Z
|
边界限制 |
5 |
| |
模式选择 |
实例
1. 字符转义
1问:要匹配字符串 33333333333 中的 $ 正则应该怎么写? 2问:如果在 PHP 中 preg_match 函数分别用单引号和双引号的表达式来匹配上面的 $ ,怎么写?
答案:
- 表达式需要的规则是
$
- 用单引号表示上面的字符串
'/\$/' 。(为方便查看我们拆分一下为 '/\ \ \ $/' )
- 用双引号表示上面的字符串
"/\$/" 。(为方便查看我们拆分一下为 "/\ \ \ $/" )
- 问什么呢?
再答:
- PHP 中单引号不转义任何字符,但是唯独转义
,所以我们需要 6个 来生成表达式。
双引号除了转义 以外,还需要多一个 用来转义 $ 所以它 需要 7 个
5| 모드 선택🎜🎜
|
예
1. 문자 이스케이프
🎜1Q: 문자열 333333$3333333
에서 $
와 일치하는 정규식을 어떻게 작성해야 합니까?
2Q: PHP의 preg_match
함수가 🎜작은따옴표🎜와 🎜큰따옴표🎜 표현식을 사용하여 위의 $
와 일치하는 경우 어떻게 작성하나요? 🎜🎜🎜답변: 🎜🎜
- 표현식에 필요한 규칙은
\$
입니다.🎜
- 위 문자열
'/\\\$를 나타내려면 작은따옴표를 사용하십시오. /'
. (보기 쉽게 '/\ \ \ $/'
로 나누었습니다.) 🎜
- 위 문자열
"/\\\$/". (보기 쉽게 <code>"/\ \ \ $/"
로 나누었습니다.) 🎜 - 무엇을 물어보시나요? 🎜
🎜🎜다시 대답해 주세요: 🎜🎜- PHP에서 작은따옴표는 어떤 문자도 이스케이프하지 않지만
만 이스케이프되므로 6개의 가 필요합니다. / code> 표현식을 생성합니다. 🎜<li>🎜<code>
를 이스케이프하는 것 외에도 큰따옴표에는 $
를 이스케이프하려면
가 하나 더 필요하므로 7개의 가 필요합니다. 코드>. 🎜🎜🎜🎜 추천 관련 튜토리얼: 🎜PHP 비디오 튜토리얼🎜🎜
위 내용은 정규식에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!