2014-01-11 3 views
0

Я пытаюсь извлечь слово между последними / и вторым последним / - то есть едой в следующем примере PHP.Регулярное выражение символов между последним и вторым последним заполнением символа

  1. $string = https://ss1.xxx/img/categories_v2/FOOD/fastfood (хотел бы заменить $string на food)
  2. $string = https://ss1.xxx/img/categories_v2/SHOPS/barbershop (хотел бы заменить $string на shops)

Я новичок в Regex и попытался /[^/]*$ - однако это возвращение everying после последний / .. любая помощь будет оценена .. спасибо!

Я использую PHP.

ответ

0

Вы можете использовать это:

$result = preg_replace_callback('~(?<=/)[^/]+(?=/[^/]*$)~', function ($m) { 
    return strtolower($m[0]); }, $string); 

шаблонные детали:

~   # pattern delimiter 
(?<=/)  # zero width assertion (lookbehind): preceded by/
[^/]+  # all characters except/one or more times 
(?=/[^/]*$) # zero width assertion (lookahead): followed by /, 
      # all that is not a/zero or more times, and the end of the string 
~   # pattern delimiter 
+0

Он хочет извлечь, а не заменить. – Barmar

1

Использование:

preg_match('#/([^/]*)/[^/]*$#', $string, $match); 
echo $match[1]; 

Вы также можете использовать:

$words = explode('/', $string); 
echo $words[count($words)-2]; 
+0

Я бы также бросил ['parse_url ($ string, PHP_URL_PATH)'] (http://uk1.php.net/parse_url) где-то в опции 2 для здравомыслия :) – Emissary

0

Regex:

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

PHP код:

<?php 
    $string = "https://ss1.xxx/img/categories_v2/FOOD/fastfood"; 
    echo preg_replace("@(\w+)(/[^/]+)[email protected]", "food$2", $string); 
    $string = "https://ss1.xxx/img/categories_v2/SHOPS/barbershop"; 
    echo preg_replace("@(\w+)(/[^/]+)[email protected]", "shops$2", $string); 
?> 
Смежные вопросы