【发布时间】:2009-07-15 07:58:41
【问题描述】:
我只想匹配文件所在的文件夹名称,
例如:
图片/2009/cat01.jpg
pic/2009/01/cat02.jpg
我只想匹配我用粗体输入的内容。
到目前为止,我有这个:
[^/]*/
哪个匹配,
pic/2009/cat01.jpg
有什么想法吗?
【问题讨论】:
我只想匹配文件所在的文件夹名称,
例如:
图片/2009/cat01.jpg
pic/2009/01/cat02.jpg
我只想匹配我用粗体输入的内容。
到目前为止,我有这个:
[^/]*/
哪个匹配,
pic/2009/cat01.jpg
有什么想法吗?
【问题讨论】:
不确定我是否理解您的要求,但试试这个:
[^/]+(?=/[^/]+$)
这将只匹配倒数第二个部分。
说明:
(?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 正则表达式了...您可能需要转义它:
[^\/]+\(?=\/[^\/]+$\)
【讨论】:
不使用正则表达式:
FILE_NAME="pic/2009/cat01.jpg"
basename $(dirname $FILE_NAME)
dirname 获取路径的目录部分,basename 打印最后一部分。
【讨论】:
在 bash 中不使用外部命令或正则表达式
# FILE_NAME="pic/2009/cat01.jpg"
# FILE_NAME=${FILE_NAME%/*}
# # echo ${FILE_NAME##*/}
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;
【讨论】:
回声图片/2009/cat01.jpg | awk -F/'{print $(NF-1)}'
【讨论】:
这样的正则表达式应该可以解决问题:
/\/([^\/]+)\/[^\/]+$/
您所追求的值将在第一个捕获组中。
【讨论】:
试试:
/[a-z0-9_-]+
这将标记从 / 开始的 URL 字符串中的所有文件夹,包括文件夹名称中包含“_”或“-”的文件夹。希望这会有所帮助。
【讨论】: