正则表达式只保留1向前字符串的结尾斜线

问题描述 投票:0回答:4

我需要删除非字母数字字符,除了下划线(_)和 - 从字符串的结尾破折号,只有一个/(正斜杠)。

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

双方应返回:'controller_123/method/';

我曾尝试到现在为止:

$string = preg_replace('/[^a-zA-Z0-9_]\/$/', '', $string);
php regex
4个回答
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
投票

你可以把它用一个简单的正则表达式,其中除了字母数字的每个字符或下划线或连字符将空字符串替换和两个以上的向前字符串末尾的斜线单/代替完成。只需更换此正则表达式,

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

随着\1

Demo

PHP演示,

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

打印,

controller_123/method/

0
投票

使用正则表达式

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

使用strripos()和strreplace

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

使用RTRIM()

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

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>

推荐问答