php - 如何使用转义字符修复 Preg 替换问题
问题描述
我正在使用 preg_replace 函数来获取重定向 url。但它没有正确替换。
我正在尝试下面的代码
$key = 'acme/(.*)/(.*)';
$val = '\Acme\Blog\Controllers\$1::$2';
$uri = 'acme/Home/hello1';
$redirect = preg_replace('#^' . $key . '$#', $val, $uri);
预期的输出是
\Acme\Blog\Controllers\Home::hello1
但获得输出是
\Acme\Blog\Controllers$1::hello1
解决方案
代码:
$key = 'acme/(.*)/(.*)';
$val = preg_quote('\\Acme\\Blog\\Controllers\\') . '$1::$2';
$uri = 'acme/Home/hello1';
$redirect = preg_replace('#^' . $key . '$#', $val, $uri);
echo $redirect;
结果:
\Acme\Blog\Controllers\Home::hello1
笔记:
这不是一个有效的路径:
'\Acme\Blog\Controllers\$1::$2';
因为反斜杠\
需要用另一个反斜杠转义,\
所以这是在字符串级别。如果要创建包含单个反斜杠的字符串,则需要放置其中两个。
$singleBackslash = '\\';
由于反斜杠被视为转义码,这会给你解析错误:
$singleBackslash = '\';
因为反斜杠逃脱了结尾'
如果你想在正则表达式中有一个反斜杠,那么你需要再次转义它,这就是我在已经转义的反斜杠上使用 preg_quote() 的原因。
推荐阅读
- c - 如何从 c 文件中输出特定文本?
- powershell - 使用 Powershell 向我自己发送邮件
- javascript - vueJs 中 Set 的大小
- reactjs - 在 React (Next JS) 和 Apollo 中创建数据后如何获取 Id
- python - 如何正确安装 Anoconda
- python - Adding Chrome Extension - BeautifulSoup - Python
- c# - I converted an integer to a string but am getting an error when try to access individual characters in that string
- grails - Grails 一对多使用自然 ID 和引用的列名
- laravel - Terminate method in middleware in laravel
- java - 我正在尝试运行一个 spring bot 应用程序,它显示执行 DDL 的 CommandAcceptanceException 错误