Регулярное выражение для сохранения только 1 косой черты в конце строки - PullRequest
0 голосов
/ 03 февраля 2019

Мне нужно удалить не алфавитно-цифровые символы, кроме _ (подчеркивание) и - тире и только один / (косая черта) из конца строки.

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

Оба должны возвращать: 'controller_123/method/';

То, что я пробовал до сих пор:

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

Ответы [ 4 ]

0 голосов
/ 03 февраля 2019

Вы можете сделать это с помощью простого регулярного выражения, где каждый символ, кроме буквенно-цифровых, подчеркиваний или дефисов, будет заменен пустой строкой, а более двух косых черт в конце строки будет заменен одним /.Просто замените это регулярное выражение,

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

на \1

Демо

PHP Demo,

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

Отпечатки,

controller_123/method/
0 голосов
/ 03 февраля 2019

Не могли бы вы попробовать следующее регулярное выражение (учитывая, что ваши входные данные будут соответствовать показанным только образцам):

.*\w\/

Regex DEMO:

In 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>
0 голосов
/ 03 февраля 2019

Использование регулярного выражения

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

Использование strripos () и strreplace

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

Использование rtrim ()

$string=rtrim("/",$string);
0 голосов
/ 03 февраля 2019

Вы можете использовать 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...