使用正则表达式匹配来自url的文件夹名称

时间:2009-07-15 07:58:42

标签: regex bash shell

我想只匹配文件所在的文件夹名称,

例如:
PIC / 2009 /cat01.jpg
pic / 2009 / 01 /cat02.jpg

我想要与粗体放置的内容相匹配。

到目前为止,我有这个:

[^/]*/

哪个匹配,
pic / 2009 / cat01.jpg

有什么想法吗?

7 个答案:

答案 0 :(得分:7)

我不确定我明白你在问什么,但试试这个:

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

这将仅匹配倒数第二节。


说明:

(?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

前瞻部分不会包含在匹配中(组0) - (如果你的正则表达式引擎不做前瞻,你可以省略前瞻但包含其内容,那么你只需要拆分/并获得第一个项)。

嗯......有一段时间没有完成bash正则表达式...可能你可能需要逃避它:

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

答案 1 :(得分:3)

不使用正则表达式:

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

dirname获取路径的目录部分,basename打印最后一部分。

答案 2 :(得分:3)

在bash中没有使用外部命令或正则表达式

# FILE_NAME="pic/2009/cat01.jpg"
# FILE_NAME=${FILE_NAME%/*}
# # echo ${FILE_NAME##*/}
2009

答案 3 :(得分:1)

我的懒惰回答:

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;

答案 4 :(得分:0)

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

答案 5 :(得分:-1)

像这样的正则表达式可以解决这个问题:

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

您所追求的价值将位于第一个捕获组中。

答案 6 :(得分:-1)

尝试:

/[a-z0-9_-]+

这将标记URL字符串中的所有文件夹,从/包含文件夹名称中包含“_”或“ - ”的文件夹开始。希望这会有所帮助。