PHP 生成的正则,以 #
开头 #u
结尾的,为什么里面的 /
反斜杠不用转义成 \/
php
<?php $pattern = '#^info/(?P<type>(area|cat))-(?P<v1>\d+)-(?P<v2>\d+)-(?P<v3>\d+)/(?P<page>\d+)/$#u'; $str = 'info/area-19-0-0/40/'; preg_match($pattern,$str,$matches); print_r($matches);
Array
(
[0] => info/area-19-0-0/40/
[type] => area
[1] => area
[2] => area
[v1] => 19
[3] => 19
[v2] => 0
[4] => 0
[v3] => 0
[5] => 0
[page] => 40
[6] => 40
)
因为PHP可以使用非
/
符号作为界定符号,在你的例子里面,界定符号为#
,所以不需要转义符号/
。如果你使用
/
为界定符号,为了防止正则中的/
字符被当成结束界定符,所以需要转义。你这个例子中,用的界定符号为
#
,所以正则中的/
不会被当成结束界定符,所以不需要转义,但是相应地,你需要转义正则中的#
为\#
。【注】正则中的转义是为了告诉解析器这个是个常规字符,而并非正则表达式里的控制字符,所以只要不会被解析器误认为控制字符的情况下(常用的控制字符包括:
?*.[]$^|{}
和界定符),都不需要转义。