2011-10-21 55 views
0

我只是一个注册期货交易所的小白,我正在努力学习它们。如果我有一个文件名是这样的:带括号编号的文件名上的正则表达式?

myfile(1).jpg or myfile(21).jpg 

我怎么能与REG EXP(PHP或JavaScript)的file name [myfile]bracket numbering [1]extension [jpg]提取?

+0

我可以extac这个/\((.*?)\)/编号,但仍然没有文件名 – albanx

回答

2

试试这个正则表达式:

/^(.*?)(?:\((\d+)\))?\.(.+)$/ 

$1变量将包含文件名。 $2变量将包含编号(如果它是可用的,否则它将是未定义的或为空)。 $3变量将包含扩展名。

+0

“”实际上这个效果更好。谢谢。它甚至会在文件名为sadasd时得到(asdasd(23).jpg。你似乎是一个regexpt的大师 – albanx

+0

我不理解/^(.*?)的含义,特别是第一个“?”。我试图解码这个reg exp。 – albanx

+1

'^'和'$'是开始和结束的锚,这意味着匹配字符串的开始和结束。'(。*?)'中的'?'用于'ungreedy ''匹配。'?:'是告诉正则表达式不要创建任何反向引用/组,这里很难解释所有的东西。一个好的资源是[Regular-Expressions.info](http://www.regular-expressions。 info) –

0

你可以尝试使用:

^(.*?)\((\d+)\)\.(.*)$ 
  1. 第一组文件名
  2. 第二组 - 文件的数量
  3. 最后一组 - 延长无点
0

哪种语言是你使用正则表达式? 正则表达式语法的哪种变体?

下面是使用示例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+):存储组:数字序列

\.(.*)$存储组:字符串字面后达到结束您的字符串(文件扩展名)