Регулярное выражение для сбора всего после последнего/
Я новичок в регулярных выражениях и задаюсь вопросом, как фраза одна, которая собирает все после последнего /
.
Я извлекаю идентификатор, используемый Google GData.
моя примерная строка
http://spreadsheets.google.com/feeds/spreadsheets/p1f3JYcCu_cb0i0JYuCu123
Если идентификатор: p1f3JYcCu_cb0i0JYuCu123
О, и я использую PHP.
Ответы
Ответ 1
Это соответствует хотя бы одному из (ничего не косой черты), за которой следует конец строки:
[^/]+$
Примечания:
- Нет паренс, потому что ему не нужны какие-либо группы - результат переходит в группу 0 (сам матч).
- Использует
+
(вместо *
), так что если последний символ является косой чертой, он не соответствует (а не соответствует пустой строке).
Но скорее всего, более быстрое и простое решение состоит в том, чтобы использовать встроенную в язык функцию обработки списка строк, т.е. ListLast( Text , '/' )
или эквивалентную функцию.
Для PHP ближайшая функция strrchr, которая работает следующим образом:
strrchr( Text , '/' )
Это включает в себя косую черту в результатах - в соответствии с комментарием Teddy ниже вы можете удалить косую черту с помощью substr:
substr( strrchr( Text, '/' ), 1 );
Ответ 2
В общем:
/([^/]*)$
Данные, которые вы хотите, будут соответствовать совпадению первой группы.
Изменить. Поскольку вы используете PHP, вы также можете использовать strrchr
, который возвращает все, начиная с последнего появления символ в строке до конца. Или вы можете использовать комбинацию strrpos
и substr
, сначала найдите позицию последнего вхождения, а затем подстроку с этой позиции до конца. Или explode
и array_pop
, разделите строку на /
и получите только последнюю часть.
Ответ 3
Вы также можете получить "имя файла" или последнюю часть с помощью функции basename.
<?php
$url = 'http://spreadsheets.google.com/feeds/spreadsheets/p1f3JYcCu_cb0i0JYuCu123';
echo basename($url); // "p1f3JYcCu_cb0i0JYuCu123"
В моем окне я могу просто передать полный URL. Возможно, вам может понадобиться снять http:/
с фронта.
Basename и dirname отлично подходят для перемещения по всему, что выглядит как путь к файлу unix.
Ответ 4
/^.*\/(.*)$/
^
= начало строки
.*\/
= жадное совпадение для последнего события в/из начала строки
(.*)
= группа всего, что приходит после последнего события/
Ответ 5
вы также можете нормализовать разделение строк
$str = "http://spreadsheets.google.com/feeds/spreadsheets/p1f3JYcCu_cb0i0JYuCu123";
$s = explode("/",$str);
print end($s);
Ответ 6
Этот шаблон не будет записывать последний слэш в $0
, и он не будет соответствовать никому, если после последней косой черты нет символов.
/(?<=\/)([^\/]+)$/
Изменить: но для этого требуется lookbehind, не поддерживаемый ECMAScript (Javascript, Actionscript), Ruby или несколько других вкусов. Если вы используете один из этих ароматов, вы можете использовать:
/\/([^\/]+)$/
Но он будет записывать последнюю косую черту в $0
.
Ответ 7
Не программист на PHP, но strrpos кажется более перспективным местом для начала. Найдите самый правый '/', и все, что прошло, это то, что вы ищете. Нет регулярного выражения.
Найти позицию последнего вхождения char в строке
Ответ 8
на основе @Марк Рушаков отвечают лучшим решениям для разных случаев:
<?php
$path = "http://spreadsheets.google.com/feeds/spreadsheets/p1f3JYcCu_cb0i0JYuCu123?var1&var2#hash";
$vars =strrchr($path, "?"); // ?asd=qwe&stuff#hash
var_dump(preg_replace('/'. preg_quote($vars, '/') . '$/', '', basename($path))); // test.png
?>