我需要除去字符串末尾的_(下划线)和-破折号以及仅一个/(正斜杠)以外的非字母数字字符。
$string = 'controller_123/method///';
or
$string = 'controller_123/method/';
两者都应返回:'controller_123/method/'
;
到目前为止我尝试过的事情:
$string = preg_replace('/[^a-zA-Z0-9_]\/$/', '', $string);
答案 0 :(得分:2)
您可以将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/
答案 1 :(得分:1)
您可以使用简单的正则表达式来完成此操作,其中除字母数字,下划线或连字符以外的所有字符都将替换为空字符串,并且在字符串末尾的两个以上的正斜杠将替换为单个/
。只需替换此正则表达式,
[^\w-/]+|(/)/+$
使用\1
PHP演示
$s = "controller_123/method///";
echo preg_replace('@[^\w-/]|(/)/+$@', '\1', $s);
打印
controller_123/method/
答案 2 :(得分:0)
请问您是否可以尝试使用正则表达式(考虑到您的输入仅显示为示例):
.*\w\/
在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);