首页 > 解决方案 > 正则表达式在字符串末尾仅保留 1 个正斜杠

问题描述

我需要从字符串末尾删除除 _(下划线)和 - 破折号以及仅一个 /(正斜杠)之外的非字母数字字符。

$string = 'controller_123/method///';
or
$string = 'controller_123/method/';

两者都应该返回:'controller_123/method/';

我到目前为止所尝试的:

$string = preg_replace('/[^a-zA-Z0-9_]\/$/', '', $string);

标签: phpregex

解决方案


您可以使用preg_replace模式和替换数组;_第一个删除除,-和以外的非字母数字字符/,第二个删除除最后一个尾随之外的所有字符/

$string = 'controller_123/method///';
echo preg_replace(array('#[^\w/-]+#', '#/+$#'), array('', '/'), $string);

输出:

controller_123/method/

3v4l.org 上的演示

正则表达式可以通过注意我们要删除/行尾的所有内容来改进,并使用积极的前瞻来匹配这些内容。然后可以简单地将所有匹配项替换为空字符串:

$string = 'contr*@&oller_123////method///';
echo preg_replace('#[^\w/-]+|/(?=/+$)#', '', $string);

输出:

controller_123////method/

3v4l.org 上的演示


推荐阅读