PHP正则 #info/list#u 为什么反斜杠“/” 可以不用转义

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
)
阅读 3.5k
1 个回答

因为PHP可以使用非/符号作为界定符号,在你的例子里面,界定符号为#,所以不需要转义符号/

如果你使用/为界定符号,为了防止正则中的/字符被当成结束界定符,所以需要转义。
你这个例子中,用的界定符号为#,所以正则中的/不会被当成结束界定符,所以不需要转义,但是相应地,你需要转义正则中的#\#

【注】正则中的转义是为了告诉解析器这个是个常规字符,而并非正则表达式里的控制字符,所以只要不会被解析器误认为控制字符的情况下(常用的控制字符包括:?*.[]$^|{}和界定符),都不需要转义。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题