我正在尝试从以下两个字符串中替换 / admin 和 \ admin :
F:\dev\htdocs\cms\admin
http://localhost/cms/admin
在 preg_replace 中使用以下正则表达式:
/[\/\\][a-zA-Z0-9_-]*$/i
1)从第一个字符串中取代 admin ,因为它应该替换 \ admin
2)从第二个字符串中取代除 http:之外的所有内容,因为它只能替换 / admin
我在http://regexpal.com/上检查了这个表达式,它在那里工作得很完美,但在PHP中却没有。
有什么想法吗?
请注意,每个字符串 admin 的最后一部分都不是固定的,它可以 是任何用户选择的值,这就是我使用[a-zA-Z0-9 _-] *的原因 正则表达式。
答案 0 :(得分:6)
原始正则表达式应为/[\/\\][a-zA-Z0-9_-]*$/i
,但由于您需要在字符串声明中转义反斜杠,因此每个反斜杠必须用\\
表示 - 总共有4个反斜杠。
来自PHP manual:
单引号和双引号PHP字符串具有反斜杠的特殊含义。因此,如果\必须与正则表达式
\\
匹配,则必须在PHP代码中使用"\\\\"
或'\\\\'
。
因此,您的preg_replace()
语句应如下所示:
echo preg_replace('/[\/\\\\][a-zA-Z0-9_-]*$/i', '', $str);
您的正则表达式可以改进如下:
echo preg_replace('~[/\\\\][\w-]*$~', '', $str);
此处,\w
与ASCII字符[A-Za-z0-9_]
匹配。您还可以使用不同的分隔符来避免转义正斜杠/
- 我上面使用了~
。
答案 1 :(得分:0)
[\/\\\][a-zA-Z0-9_-]*$/i