В исходном коде, который я должен прочитать (не от меня), я нашел регулярное выражение, которое не работает должным образом (или, по крайней мере, с тем, что он делает, код не делает то, что должен).
Идея регулярного выражения состоит в том, чтобы удостовериться, что обрабатываемая строка имеет ровно одну косую черту в конце.
Итак, поехали:
$string =~ s/\/*$/\//g; # Add a trailing slash
Я прочитал это как «найти любое количество косых черт в конце строки (включая 0) и заменить их одной косой чертой». Но это не то, что происходит.
Регулярное выражение удваивает / несколько существующих конечных слешей. Таким образом, я получаю две косые черты, если уже есть одна или несколько. Если его нет, я получаю его (как было бы задумано).
Я могу воспроизвести его, например, с помощью Regex tester . Просто введите http://example.com/foo/ (и измените его в зависимости от количества слешей в конце) в верхнем поле, во втором - регулярное выражение, / / в качестве шаблона замены и нажмите «отправить».
Кажется, что оно вращается вокруг регулярного выражения, также заменяя «ничто» (или конец строки?) Косой чертой (так что оно заменяет «ничто» одной косой чертой, а существующее косое черта - одной косой чертой, которая компенсирует две косые черты, которые я см ...).
Я использовал
$string =~ s/\/{1,0}$/\//g; # Add a trailing slash
также, но это работает, только если в начале есть хотя бы один слеш.
EDIT
На всякий случай, если кому-то интересно:
$string =~ s/\/*\z/\//g; # Add a trailing slash
производит то же самое.
А вот прямая ссылка на тестовую страницу