php正則表達式基本


一.正則表達式的組成

1.分隔符,可以是除了字母,數字,反斜線及空白以外的任何字符,比如/,!,#,%,|,~等;通常有/,!,~

2.表達式:由一些特殊字符和非特殊字符組成.

3.修飾符:用於開啟或關閉某種功能/模式

.元字符

常用的元字符有以下幾種

. 匹配除換行符外任何字符
\w 匹配字母或數字或下划線或漢字
\s 匹配任意空白字符
\d 匹配數字
\b 匹配單詞開始或結束
^ 匹配字符串開始
$ 匹配字符串結束
- 表示范圍
[] 匹配括號中任意一個字符
* + ? 量詞

.字符組

如果匹配沒有預定義的元字符
,可以使用字符組;只需要在[]內列出他們;

[aoeiou]匹配任何一個英文元音字母;
[
.?!] 匹配標點符號 . ? !

ps
:盡管[]號內有好多字符,但他只匹配單個字符


.轉義

如果要匹配元字符本身
,比如?,直接匹配,會被當成元字符處理,這時候要使用轉義;
\
?

:
\
? 就可匹配字符串中含有?的字符串

ps
:字符組中的元字符不需要轉義

.反義

\W 匹配除字母或數字或下划線或漢字以外
\S 匹配除任意空白字符以外
\D 匹配除數字以外
\B 匹配不是單詞開始或結束的位置

字符組的反義是加
^
[
^abc] 匹配除了abc這幾個字母以外的任意字符

ps
:反義的特征是和一些已知元字符相反,並且為大寫形式.字符組例外

.分支

| 表示分支

分支就是存在多種可能的匹配情況;如要匹配cat
,hat,fat,toat,就可以用分支形式
(c
|h|f|to)at

ps
:匹配分支條件時,從左到右測試每個條件,如果滿足某個分支,就不再考慮其他條件.

.分組

重復單個字符需要限定符即可做到
,重復多個字符就需要分組;分組用小括號指定表達式,然后規定這個表達式重復的次數.


1.捕獲
(
exp) 匹配exp,並捕獲文本到自動命名組里
(
?<name>exp) 匹配exp,並捕獲文本到name組里
(
?:exp) 匹配exp,不捕獲,也不分配組號

示例1
:
<?php
$str = 'cat';
preg_match_all('/(c).*/', $str, $arr);
var_dump($arr);

輸出(自動命名組)
:
array(2) {
[
0]=>
array(1) {
[
0]=>
string(3) "cat"
}
[
1]=>
array(1) {
[
0]=>
string(1) "c"
}
}

示例2
:
<?php
$str = 'cat';
preg_match_all('/(?<name>c).*/', $str, $arr);
var_dump($arr);

輸出(多出一個test組)
:
array(3) {
[
0]=>
array(1) {
[
0]=>
string(3) "cat"
}
[
"test"]=>
array(1) {
[
0]=>
string(1) "c"
}
[
1]=>
array(1) {
[
0]=>
string(1) "c"
}
}

示例3
:
<?php
$str = 'cat';
preg_match_all('/(?:c).*/', $str, $arr);
var_dump($arr);

輸出
:

array(1) {
[
0]=>
array(1) {
[
0]=>
string(3) "cat"
}
}

2.零寬斷言(匹配的是事實,不是內容)
(
?=exp) 匹配exp前面的位置
(
?<=exp) 匹配exp后面的位置
(
?!exp) 匹配后面跟的不是exp的位置
(
?<!exp) 匹配前面跟的不是exp的位置

:
<?php
$str = 'testecattest';
preg_match_all('/(?=te)/', $str, $arr);

則輸出
:
array(1) {
[
0]=>
array(3) {
[
0]=>
string(0) ""
[
1]=>
string(0) ""
[
2]=>
string(0) ""
}
}
匹配到三處


ps
:默認情況下,每個分組擁有一個組號,規則是從左到右,以分組的左括號為標志,第一個出現在分組里的為1,第二個為2,以此類推;分組0為整個表達式.

.反向引用

反向引用在於重復搜索前面某個分組匹配的文本
.

示例
:
$str = '[url]1.gif[/url]';
$img = preg_replace('/\[url\](\d+\.gif)\[\/url\]/', '<img src="$1" />', $str);
echo $img;

輸出
<img src="1.gif" />

$1匹配了分組(\d
+\.gif)


.環視(零寬斷言)

1.順序肯定環視(?=exp)
斷言自身出現位置的后面能匹配表達式exp
示例
:
<?php
$str = 'what are you doing testing?';
preg_match_all('/\b\w+(?=ing\b)/', $str, $arr);
var_dump($arr);

匹配do和test

2.逆序肯定環視(?<=exp)
斷言自身出現位置的前面能匹配表達式exp
示例
:
<?php
$str = 'what are you doing testing?';
preg_match_all('/\b(?=ing)/', $str, $arr);
var_dump($arr);

匹配doing和testing

3.順序否定環視(?!exp)

4.逆序否定環視(<!exp)




.常用修飾符/模式
1. i 忽略大小寫
示例
:
<?php
$str = 'cat test CAT';
preg_match_all('/cat/i', $str, $arr);
var_dump($arr);

不加i修飾符
,只匹配cat

2. m 多行模式
僅當表達式中出現
^,$至少一個元字符且有換行符\n時,m修飾符才起作用;

:
$str = 'cat

test
cat
';

要提取cat

a
.不用多行模式
preg_match_all('/cat.*/', $str, $arr);

b
.用多行模式
preg_match_all('/cat.*$/m', $str, $arr);

3.s 點號統配模式(.號可以匹配換行符)
:
<?php
$str = 'cat
t
test
cat
f
';
preg_match_all('/t.*f/s', $str, $arr);
var_dump($arr);

輸出
:
array(1) {
[
0]=>
array(1) {
[
0]=>
string(19) "t
t
test
cat
f
"
}
}


4.U 懶惰模式
等效於懶惰匹配

5.D 結尾限制
等效於結尾限定符

6.u 啟用pcre中與perl不兼容的功能,模式字符串被當成utf-8

 

关注微信公众号

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



PHP 正則表達式資料 PHP 正則表達式語法 PHP中正則表達式 PHP正則表達式 php正則表達式的基本語法 php基礎9———正則表達式2 php的正則表達式 PHP正則表達式 - 基礎 PHP和正則表達式 PHP正則表達式
 
粤ICP备14056181号  © 2014-2020 ITdaan.com