Regex 使用正则表达式从url匹配文件夹名称
我只想匹配文件所在的文件夹名 例如:Regex 使用正则表达式从url匹配文件夹名称,regex,bash,shell,Regex,Bash,Shell,我只想匹配文件所在的文件夹名 例如: pic/2009/cat01.jpg pic/2009/01/cat02.jpg 我只想匹配我用粗体写的内容 到目前为止,我有: 哪个匹配, pic/2009/cat01.jpg 有什么想法吗?我不知道你在问什么,但试试这个: [^/]+(?=/[^/]+$) 这将只匹配第二个到最后一个部分 说明: (?x) # enable comment mode [^/]+ # anything that is not a slash, one or
pic/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
lookahead部分将不包括在匹配中(组0)-(您可以省略lookahead,但包括其内容,如果您的正则表达式引擎不进行lookahead,那么您只需要拆分/并获取第一项)
嗯。。。有段时间没做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;
echo pic/2009/cat01.jpg | awk-F/{print$(NF-1)}试试:
/[a-z0-9_-]+
这将标记URL字符串中的所有文件夹,该URL字符串以文件夹名称中包含“\”或“-”的文件夹开始。希望这会有所帮助 Peter Boughton()提供的解决方案要好得多。嗯,是的,这似乎有效,但我如何指定它应该使用哪个组?(我在使用sed,还是应该使用awk…)谢谢,这很好用。它不必是正则表达式,这正是我认为你会使用的工作。同样感谢,我已经使用这个网站一段时间了,但今天才注册,我对我的解决方案的速度感到震惊。虽然这对我使用sed不起作用:sed-E的//[^\/]+(?=\/[^\/]+$)//g'错误:sed:-E表达式1,char 26:无效的前一个正则表达式[^\/]+(?=\/[^\/]+$)没有任何作用,它没有改变任何东西。但是您发布的最上面的“[^/]+(?=/[^/]+$)”确实可以作为正则表达式使用,我可以在以后的php中使用它。PS,谢谢你详细解释了每一部分的作用,我永远无法理解每一部分的作用。
/[a-z0-9_-]+