php - 正则表达式在字符串末尾仅保留 1 个正斜杠
问题描述
我需要从字符串末尾删除除 _(下划线)和 - 破折号以及仅一个 /(正斜杠)之外的非字母数字字符。
$string = 'controller_123/method///';
or
$string = 'controller_123/method/';
两者都应该返回:'controller_123/method/'
;
我到目前为止所尝试的:
$string = preg_replace('/[^a-zA-Z0-9_]\/$/', '', $string);
解决方案
您可以使用preg_replace
模式和替换数组;_
第一个删除除,-
和以外的非字母数字字符/
,第二个删除除最后一个尾随之外的所有字符/
:
$string = 'controller_123/method///';
echo preg_replace(array('#[^\w/-]+#', '#/+$#'), array('', '/'), $string);
输出:
controller_123/method/
正则表达式可以通过注意我们要删除/
行尾的所有内容来改进,并使用积极的前瞻来匹配这些内容。然后可以简单地将所有匹配项替换为空字符串:
$string = 'contr*@&oller_123////method///';
echo preg_replace('#[^\w/-]+|/(?=/+$)#', '', $string);
输出:
controller_123////method/
推荐阅读
- c++ - std::scientific 是否总是导致浮点数的标准化科学记数法?
- java - 继续春季批处理作业的正确方法
- javascript - 自定义 Highchart 地图的图例类型和颜色
- c# - .NET Core 2.0 MVC 文件上传进度
- performance - Cloudflare 导致请求缓慢
- java - 将 imageView 放在另一个中间
- security - PasswordVault 如何保护密码?
- openshift - 启用 minishift/cdk 指标
- vba - VBA 中的后期绑定与早期绑定 - (CreateObject() vs New)
- machine-learning - ANNs CNNs 和 MLPs 中隐藏层之间的层间缩放或归一化