Сопоставить имя папки из URL с помощью регулярных выражений - PullRequest
2 голосов
/ 15 июля 2009

Я хочу соответствовать только имени папки, в которой находится файл,

например:
рис / 2009 / cat01.jpg
рис / 2009 / 01 / cat02.jpg

Я хочу просто соответствовать тому, что я выделил жирным шрифтом.

Пока у меня есть это:

[^/]*/

Что будет соответствовать,
рис. / 2009 / cat01.jpg

Есть идеи?

Ответы [ 7 ]

7 голосов
/ 15 июля 2009

Не уверен, что я понимаю, о чем вы спрашиваете, но попробуйте это:

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

Это будет соответствовать только от второго до последнего раздела.


Объяснение:

(?x)     # enable comment mode
[^/]+    # anything that is not a slash, one or more times
(?=      # begin lookahead
  /      # a slash
  [^/]+  # again, anything that is not a slash, once or more
  $      # end of line
)        # end lookahead

Секция lookahead не будет включена в совпадение (группа 0) - (вы можете пропустить lookahead, но включите его содержимое, если ваш движок регулярных выражений не выполняет lookahead, тогда вам просто нужно разделить на / и получить первый пункт).

Хммм ... давно не выполнял bash regex ... возможно, вам, возможно, придется его избежать:

[^\/]+\(?=\/[^\/]+$\)
3 голосов
/ 15 июля 2009

без использования внешних команд или регулярных выражений, в bash

# FILE_NAME="pic/2009/cat01.jpg"
# FILE_NAME=${FILE_NAME%/*}
# # echo ${FILE_NAME##*/}
2009
3 голосов
/ 15 июля 2009

Без использования регулярного выражения:

FILE_NAME="pic/2009/cat01.jpg"
basename $(dirname $FILE_NAME)

dirname возвращает часть пути к каталогу, basename печатает последнюю часть.

1 голос
/ 18 июля 2009

Мой ленивый ответ:

for INPUTS in pic/2009/cat01.jpg pic/2009/01/cat02.jpg ; do
  echo "Next path is $INPUTS";
  LFN="$INPUTS";
  for FN in `echo $INPUTS | tr / \ ` ; do
    PF="$LFN";
    LFN="$FN";
  done;
  echo "Parent folder of $FN is $PF";
done;
0 голосов
/ 09 августа 2016

Попробуйте:

/[a-z0-9_-]+

Это пометит все папки в строке URL, начиная с / включая папки, имеющие в имени папки '_' или '-'. Надеюсь, это поможет.

0 голосов
/ 28 июля 2009

echo pic / 2009 / cat01.jpg | awk -F / '{print $ (NF-1)}'

0 голосов
/ 15 июля 2009

Регулярное выражение, подобное этому, должно сработать:

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

Полученное вами значение будет в первой группе захвата.

...