我遇到了一个正则匹配问题,突然捕获组的概念,手册是一个略,百度意外转向C和java #定期捕获组的特殊用法,PHP不搜索关键词相关的内容,自己的尝试,它是PHP可行,所以总结,分享,也希望会有巨大的和仔细的学习者发现我对问题的理解。

什么是捕获组

捕获组语法:





性格


描述


样品




(模式)


模式,并捕获结果,自动设置号码。


(abc)+ D
比赛或abcabcd ABCD




(模式)
或
('name'pattern)


匹配模式并捕获结果,并将名称设置为组名称。







嗯


对捕获组的反向引用。Num是一个正整数。


((w)() 2 1
比赛啊




◎K
或
k'name


对命名捕获组的反向引用。名称是捕获组的名称。


()ABC
比赛xabcx








让我们来看看PHP的正则匹配函数。


国际preg_match(字符串的模式字符串$ {数组$matches { int,int = 0美元标志{,} } }偏移= 0美元)


前两个项目是我们经常使用的,$模式是一个规则匹配模式,$字符串是匹配的字符串。

数组$匹配,这是一个数组,表示匹配的结果被写入到$匹配中。

如果int标记传递此标记,则字符串匹配器(相对于目标字符串)附加到出现的每个匹配项中。

int偏移量用于从目标字符串指定一个未知的开始搜索(单位是字节)。

让我们看看匹配的值是多少。


元模式= (=);
$str =××= 4b = 98c = 56××;
RES = preg_match美元(美元模式,$str,$匹配);
var_dump($匹配);


结果如下:

数组(大小= 4)

0 = string'a = 4b = 98c = 56(长度= 11)

1 =字符串'(长度= 1)

2 =字符串98(长度= 2)

3 =字符串'56(长度= 2)

现在我们知道了捕获组是什么,捕获组是正则表达式()的一部分,每个对()是一个捕获组。

PHP将从1开始对它进行编号,至于为什么从1开始,这是因为PHP将匹配0的完整字符串编号。

如果有多个圆括号或嵌套圆括号,则该数字按左括号的顺序编号,如图中所示:


根据123组红蓝组的匹配模式。

对捕获组的忽略和命名

我们还可以防止PHP作为匹配组号:在匹配组中添加模式:


元模式= (=);


这样,匹配的结果就会变成:


数组(大小= 3)
0 = string'a = 4b = 98c = 56(长度= 11)
1 =字符串'(长度= 1)
2 =字符串'56(长度= 2)


当然,我们也可以在括号的内部给它一个唯一的名字。

指定的分组可以接受(),('name')和(P)的语法。上一版本只接受(p)语法。

例如:$ =(=);

结果如下:


数组(大小= 5)
0 = string'a = 4b = 98c = 56(长度= 11)
1 =字符串'(长度= 1)
秒= >字符串98(长度= 2)
2 =字符串98(长度= 2)
3 =字符串'56(长度= 2)


在保存索引数组时,添加一个关联项,而键值是捕获组名。

捕获组的反向引用

当我们使用preg_replace()定期更换的功能,我们也可以使用或n引用n捕获组。


元模式= (=);
$str =××= 4b = 98c = 56××;
$ = 1 2美元3;
回声preg_replace(合模式,为RP,$str); / / * 4 / 98 / 56 / / * *


1表示捕获组为1(4),捕获组为2(98),捕获组为3(56);捕获组为2。

非捕获组的用法:

非捕获组语法:






性格


描述


样品




(::模式)


匹配模式,但不捕获匹配结果。


工业(:Y | IES)
match'industry'or'industries。




(=模式)


零宽度正prelooking,和匹配的结果没有被捕获。


Windows(= 95 | 98 | NT | 2000)
匹配窗口Windows2000
不匹配的窗口以上。




(!模式)!


零宽度进行预检,并匹配结果没有被捕获。


窗口!95 | 98 | NT | 2000)
匹配窗口以上
不匹配的窗口Windows2000。




(<模式)


零宽度是向前向后看的,匹配结果不会被捕获。


2000(<=办公室|字| Excel)
匹配2000在Office2000
不匹配2000 Windows2000。




(<<!模式)


零宽度负反检查,没有匹配结果不被捕获。


2000(<!办公室|字| Excel)
匹配2000中的系统
不匹配2000 Office2000。






为什么称为非捕获组这是因为它们在匹配模式下具有捕获组的特性,但是在匹配时,PHP不会对它们进行编组,它们只会影响匹配结果,而不会输出结果。

(= xxx)匹配xxx稍后的数量。

注释格式:仅在匹配模式字符串之后!

例如:


模式=;
$str =ab36abc8eg ;
RES = preg_match美元(美元模式,$str,$匹配);
var_dump($匹配); / / 6


这场比赛是6场,因为只有一个号码,后面还有一个ABC。

在XXX前面匹配一个数字

注意格式:仅在匹配模式字符串之前!

例如:


$ = (< abc);
$str =ab36abc8eg ;
RES = preg_match美元(美元模式,$str,$匹配);
var_dump($匹配); / / 8


这场比赛是8场,因为只有一个号码,后面还有一个ABC。

相对于(= xxx)(< = xxx)是(!= XXX)(<!= xxx),并在非!

它表示前面的/后面不是xxx的字符串,它不再是一个例子。

如果你觉得Moto Hirofumi对你是有帮助的,你可以推荐或关注我,如果你有任何问题,你可以留言在下面,谢谢。