Подтвердить что ты не робот

Регулярное выражение для сбора всего после последнего/

Я новичок в регулярных выражениях и задаюсь вопросом, как фраза одна, которая собирает все после последнего /.

Я извлекаю идентификатор, используемый Google GData.

моя примерная строка

http://spreadsheets.google.com/feeds/spreadsheets/p1f3JYcCu_cb0i0JYuCu123

Если идентификатор: p1f3JYcCu_cb0i0JYuCu123

О, и я использую PHP.

4b9b3361

Ответ 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
?>