我试图从以下两个字符串替换/ admin和\ admin:
F:\dev\htdocs\cms\admin
http://localhost/cms/admin
Run Code Online (Sandbox Code Playgroud)
在preg_replace中使用以下正则表达式:
/[\/\\][a-zA-Z0-9_-]*$/i
Run Code Online (Sandbox Code Playgroud)
1)从第一个字符串,它只是替换管理员,因为它应该替换\ admin
2)从第二个字符串中它取代了除http之外的所有内容:因为它应该只替换/ admin
我在http://regexpal.com/上检查了这个表达式,它在那里工作得很完美,但在PHP中却没有.
任何的想法?
请注意,每个字符串admin的最后一部分不是固定的,它可以是任何用户选择的值,这就是我在正则表达式中使用[a-zA-Z0-9 _-]*的原因.
原始的正则表达式应该是/[\/\\][a-zA-Z0-9_-]*$/i,但由于你需要在字符串声明中转义反斜杠,每个反斜杠必须用\\- 4个反斜杠表示.
从PHP手册:
单引号和双引号PHP字符串具有反斜杠的特殊含义.因此,如果\具有与正则表达式匹配
\\,则"\\\\"或者'\\\\'必须在PHP代码中使用.
所以,你的preg_replace()陈述应该是这样的:
echo preg_replace('/[\/\\\\][a-zA-Z0-9_-]*$/i', '', $str);
Run Code Online (Sandbox Code Playgroud)
您的正则表达式可以改进如下:
echo preg_replace('~[/\\\\][\w-]*$~', '', $str);
Run Code Online (Sandbox Code Playgroud)
在这里,\w匹配ASCII字符[A-Za-z0-9_].你也可以避免/使用不同的分隔符来逃避正斜杠- 我~上面已经使用过了.
| 归档时间: |
|
| 查看次数: |
2084 次 |
| 最近记录: |