发布网友 发布时间:2022-05-06 20:03
共2个回答
热心网友 时间:2023-09-14 17:24
我不会php,但也可以为您解答。
前面你应该懂了,就是原字匹配,
我猜括号的地方才是你看不懂的。
在正则表达式里,括号匹配到的内容可以存入分组内,
比如有一段正则
qq:(\d+) nick:([a-zA-Z]+)用来匹配文本
qq:1014359461 nick:Wizard匹配完后,
第一个括号的表达式『(\d+)』匹配到的内容『1014359461』会存入分组1里,
第二个括号的表达式『([a-zA-Z]+)』匹配到的内容『Wizard』会存入分组2里,
如果再有括号,就继续存入分组3、分组4...
不过这样会有上限,也不是很清晰
所以,可以使用另一种方法,看如下正则
qq:(?<qq>\d+) nick:(?<nick>[a-zA-Z]+)还是匹配刚才那段文本,匹配成功后,
不再有刚才的分组1和分组2,取而代之的是 名为『qq』和『nick』这两个分组,后面我简称它们为 $qq、$nick
存入 $qq 的内容依然是之前 分组1 里的 『1014359461』
存入 $nick 的内容依然是之前 分组2 里的 『Wizard』
再谈谈括号内的『|』符号,如下正则
(css|js|flash)它含义是,此处位置能匹配的只有
『css』或者『js』,或者『flash』,否则匹配不成功
匹配成功后会存入 一个分组内
如你发的图里的
(?<controller>(css|js|flash))这部分含义如前一条所说那样,只不过会把匹配到的值存入 $controller 分组内
接下来,讲『[...]』
[123abc]这个正则表示只匹配『123abc』里的其中一个字符,
如果有用『-』且不在第一位则有特殊含义(第一位是普通符号),如下
[1-3a-c]这个正则就和上一条正则功能是一样的,表示允许匹配中括号里的一个字符,范围是从 1到3,或者 a到c
你的代码里
[a-zA-Z0-9/]表示匹配一个字符,该字符的范围是 a-z(小写字母),或者A-Z(大写字母),或者0-9(一位数字),或者后面那个『/』字符
而后面加个+符号
则是此处正则必须匹配一个 字母或数字 或者多个,并尽量匹配多个
那么你代码里的
(?<name>[a-zA-Z0-9/]+)就是将前前一条正则匹配到的内容存入 $name 分组中去
我不懂PHP,但知道这里的 『/(』 是转义字符,这个是php语法里的东西,你要注意这一点
还有前面提到那么多次“分组“这个词,那这些分组怎么获取呢,这个是php语言里的东西,你可以去查一下
另,据我所值『(?<name>...)』这样的语法也可以这么写『(?'name'...)』,不知道这个能在php里通过不。
至此,你的疑惑应该解开了吧,很用心写的,请采纳哈,谢谢~
热心网友 时间:2023-09-14 17:25
前面都是照着匹配