正则表达式在字符串末尾仅保留1个正斜杠

时间:2019-02-03 12:37:29

标签: php regex

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

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

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

到目前为止我尝试过的事情:

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

4 个答案:

答案 0 :(得分:2)

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

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

输出:

controller_123/method/

Demo on 3v4l.org

可以通过注意到我们要删除行末尾的所有/并使用正向查找来匹配它们来改进正则表达式。然后,所有匹配项都可以简单地替换为空字符串:

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

输出:

controller_123////method/

Demo on 3v4l.org

答案 1 :(得分:1)

您可以使用简单的正则表达式来完成此操作,其中除字母数字,下划线或连字符以外的所有字符都将替换为空字符串,并且在字符串末尾的两个以上的正斜杠将替换为单个/。只需替换此正则表达式,

[^\w-/]+|(/)/+$

使用\1

Demo

PHP演示

$s = "controller_123/method///";
echo preg_replace('@[^\w-/]|(/)/+$@', '\1', $s);

打印

controller_123/method/

答案 2 :(得分:0)

请问您是否可以尝试使用正则表达式(考虑到您的输入仅显示为示例):

.*\w\/

Regex DEMO:

php中尝试执行以下操作。

<html>
<head>
<title>Online PHP Script Execution</title>
</head>
<body>
<?php
   echo "<h1>Hello, PHP!</h1>\n";
   $string = 'controller_123/method///';
   preg_match('/.*\w\//', $string, $matches);
   print_r($matches);
?>
</body>
</html>

在测试时,正在在线终端给我以下输出。

$php main.php
<html>
<head>
<title>Online PHP Script Execution</title>
</head>
<body>
<h1>Hello, PHP!</h1>
Array
(
    [0] => controller_123/method/
)
</body>
</html>

答案 3 :(得分:0)

使用正则表达式

$string=preg_replace("//$/", '', $string );

使用strripos()和strreplace

$string=str_replace(strripos("/",$string),"",$string)

使用rtrim()

$string=rtrim("/",$string);