Intereting Posts
htaccess перенаправляет удаление index.php Удаление нескольких белых пространств PHP: Удаленная функция Вызов и возврат результата? Получить внутренний HTML родительского элемента с php и xpath Как добавить xml-данные в xml-файл без перезаписи существующих данных с помощью php? Правильно установите WordPress внутри Rails без 404s? Как проверить цифровую подпись с помощью openssl Генерировать массив из списка, разделенного запятыми, – PHP Объединение PDF-файлов GhostScript (Потеря редактируемых полей) Текстовая обработка с PHP Как создать динамическую ассоциацию сущностей с Doctrine2 в Symfony2 Моя Zend Framework «цитирует» беспорядок PHP к серийному со странными скоростями в бодах SQLSTATE : Нарушение ограничения целостности: 1452 Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не удалось – Laravel Успешно подключиться к DB2, используя PHP НЕ используя ODBC?

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

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

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

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

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

Где идентификатор: p1f3JYcCu_cb0i0JYuCu123

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

Это соответствует хотя бы одному из (ничего не косой черты), за которым следует конец строки:

 [^/]+$ 

Заметки:

  • Нет парнеров, потому что ему не нужны какие-либо группы – результат переходит в группу 0 (сам матч).
  • Использует + (вместо * ), так что если последний символ является косой чертой, он не соответствует (а не соответствует пустой строке).

Но, скорее всего, более быстрое и простое решение заключается в использовании встроенных функций обработки списка строк вашего языка, то есть ListLast( Text , '/' ) или эквивалентной функции.

Для PHP ближайшей функцией является strrchr, которая работает следующим образом:

 strrchr( Text , '/' ) 

Это включает в себя косую черту в результатах – согласно комментарию Тедди ниже, вы можете удалить косую черту с помощью substr :

 substr( strrchr( Text, '/' ), 1 ); 

В общем:

 /([^/]*)$ 

Тогда нужные вам данные будут соответствовать первой группе.


Изменить Поскольку вы используете PHP, вы также можете использовать strrchr который возвращает все, начиная с последнего появления символа в строке до конца. Или вы можете использовать комбинацию strrpos и substr , сначала найдите позицию последнего появления, а затем получите подстроку с этой позиции до конца. Или explode и array_pop , разбить строку на / и получить только последнюю часть.

Вы также можете получить «имя файла» или последнюю часть с помощью функции basename .

 <?php $url = 'http://spreadsheets.google.com/feeds/spreadsheets/p1f3JYcCu_cb0i0JYuCu123'; echo basename($url); // "p1f3JYcCu_cb0i0JYuCu123" 

На моей коробке я мог просто передать полный URL. Возможно, вам понадобится снять http:/ с фронта.

Basename и dirname отлично подходят для перемещения по всему, что выглядит как путь к файлу unix.

 /^.*\/(.*)$/ 

^ = начало строки

.*\/ = жадный совпадение до последнего события до / от начала строки

(.*) = группа всего, что приходит после последнего события /

вы также можете нормализовать разделение строк

 $str = "http://spreadsheets.google.com/feeds/spreadsheets/p1f3JYcCu_cb0i0JYuCu123"; $s = explode("/",$str); print end($s); 

Этот шаблон не будет записывать последнюю косую черту в $0 , и она не будет соответствовать ничем, если после последней косой черты нет символов.

 /(?<=\/)([^\/]+)$/ 

Редактировать: но для этого требуется lookbehind, не поддерживаемый ECMAScript (Javascript, Actionscript), Ruby или несколькими другими вариантами . Если вы используете один из этих ароматов, вы можете использовать:

 /\/([^\/]+)$/ 

Но он зафиксирует последний слэш в $0 .

Не программист PHP, но strrpos кажется более перспективным местом для начала. Найдите самый правый '/', и все, что прошло, это то, что вы ищете. Нет регулярного выражения.

Найти позицию последнего вхождения символа в строке

основанный на ответе @ Mark Rushakoff, лучшее решение для разных случаев:

 <?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 ?> 
  1. Регулярное выражение для сбора всего после последнего /
  2. Как получить имя файла из полного пути с помощью PHP?