Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正则表达式中特殊字符的含义_Php_Regex_Preg Match - Fatal编程技术网

Php 正则表达式中特殊字符的含义

Php 正则表达式中特殊字符的含义,php,regex,preg-match,Php,Regex,Preg Match,我已经挖了好几个小时了。我在路由器课上发现了一些不同的正则表达式 preg_match('#^'.$key.'$#', $uri); preg_replace('#^'.$key.'$#', $val, $uri); 我制作了一个测试php文件,如下所示: <?php $route['login'] = 'user/login'; $route['user/([a-zA-Z-]+)'] = 'user/profile/$1'; $uri = 'user/asfd'; foreach

我已经挖了好几个小时了。我在路由器课上发现了一些不同的正则表达式

preg_match('#^'.$key.'$#', $uri);
preg_replace('#^'.$key.'$#', $val, $uri);
我制作了一个测试php文件,如下所示:

<?php

$route['login'] = 'user/login';
$route['user/([a-zA-Z-]+)'] = 'user/profile/$1';

$uri = 'user/asfd';

foreach ($route as $key => $val)
{
    if (preg_match('#^'.$key.'$#', $uri))
    {
        echo preg_replace('#^'.$key.'$#', $val, $uri);
    }
}

这里我不明白的是“^和$”的用法。我已经爬过了网页,想找到一些解释,但运气不好。

在本例中,开头和结尾是正则表达式的分隔符。您以前可能看到它们是
/
,但是可以使用许多不同的字符。它们仅表示正则表达式模式的开始和结束,后面可能会有其他正则表达式选项,如大小写不敏感(
i
)、全局匹配(
g
)等(尽管在PHP中使用了
preg\u match\u all()
而不是
g
标志)

因此,匹配的实际模式是
^$key$
。也就是说,要匹配的字符串的开头、
$key
的值以及字符串的结尾

在这个表达式中选择
\
而不是
/
作为分隔符的可能原因是,它消除了使用
\
来转义URI模式的斜杠的需要,正如PHP手册中所解释的那样。preg_*函数来自PCRE(Perl兼容正则表达式)库。Perl支持文本正则表达式,使用正则表达式分隔符,就像字符串使用单引号和双引号一样。PHP不支持文本正则表达式,但库仍然需要分隔符

user/profile/asfd