我想只匹配文件所在的文件夹名称,
例如:
PIC / 2009 /cat01.jpg
pic / 2009 / 01 /cat02.jpg
我想要与粗体放置的内容相匹配。
到目前为止,我有这个:
[^/]*/
哪个匹配,
pic / 2009 / cat01.jpg
有什么想法吗?
答案 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字符串中的所有文件夹,从/包含文件夹名称中包含“_”或“ - ”的文件夹开始。希望这会有所帮助。