我只是一个注册期货交易所的小白,我正在努力学习它们。如果我有一个文件名是这样的:带括号编号的文件名上的正则表达式?
myfile(1).jpg or myfile(21).jpg
我怎么能与REG EXP(PHP或JavaScript)的file name [myfile]
,bracket numbering [1]
和extension [jpg]
提取?
我只是一个注册期货交易所的小白,我正在努力学习它们。如果我有一个文件名是这样的:带括号编号的文件名上的正则表达式?
myfile(1).jpg or myfile(21).jpg
我怎么能与REG EXP(PHP或JavaScript)的file name [myfile]
,bracket numbering [1]
和extension [jpg]
提取?
试试这个正则表达式:
/^(.*?)(?:\((\d+)\))?\.(.+)$/
$1
变量将包含文件名。 $2
变量将包含编号(如果它是可用的,否则它将是未定义的或为空)。 $3
变量将包含扩展名。
“”实际上这个效果更好。谢谢。它甚至会在文件名为sadasd时得到(asdasd(23).jpg。你似乎是一个regexpt的大师 – albanx
我不理解/^(.*?)的含义,特别是第一个“?”。我试图解码这个reg exp。 – albanx
'^'和'$'是开始和结束的锚,这意味着匹配字符串的开始和结束。'(。*?)'中的'?'用于'ungreedy ''匹配。'?:'是告诉正则表达式不要创建任何反向引用/组,这里很难解释所有的东西。一个好的资源是[Regular-Expressions.info](http://www.regular-expressions。 info) –
你可以尝试使用:
^(.*?)\((\d+)\)\.(.*)$
哪种语言是你使用正则表达式? 正则表达式语法的哪种变体?
下面是使用示例Perl:
my $s = 'myfile(21).jpg';
$s =~ m/^(.*?)\((\d+)\)\.(.*)$/;
print "found 1=$1, 2=$2, 3=$3\n";
它返回:
found 1=myfile, 2=21, 3=jpg
^(.*?)\(
:存储与最短的字符串,一组到文本 “(”,从您的字符串的beggining开始
(\d+)
:存储组:数字序列
\.(.*)$
存储组:字符串字面后达到结束您的字符串(文件扩展名)
我可以extac这个/\((.*?)\)/编号,但仍然没有文件名 – albanx