2010-08-20 168 views
0

我在学习正则表达式,我试图找到这个字符串day1otlk_XXXX.gif 其中4个X将是3到4个随机数字。这是我到目前为止我所关闭的?正则表达式帮助

qr/day1otlk_\d++\.gif/i 
+0

如果你特别希望3至4个数字(而不是2或更少,或5个或更多)使用\ d {3,4}。 \ d ++将匹配任意数量的数字。 – Pete 2010-08-20 19:39:52

回答

1

正则表达式应为/day1otlk_(\d{3,4})\.gif/,也许/i为不区分大小写。如果它在字符串中,则可能需要/\bday1otlk_(\d{4})\.gif\b/而不是像"asdjklfhlday1otlk_5242.gifiasdytoi"之类的东西,而这可能不是您想要的。

{3,4}表示需要有三到四位数字,括号才能在\ 1或$ 1中捕获这四位数字。

(奖金未要求回答:如果你需要三个或五个,那么你不能这样做,{3,5}将会得到三到五个,你需要\d{3}\d{2}?或者其他的东西。 )

+1

奖励:'(\ d {3} | \ d {5})'。 – Svante 2010-08-20 19:46:59

+0

也适用,是的。可能在病理情况下效果更好。 – muhmuhten 2010-08-20 19:51:35

+2

@Svante:更好的做法是优化公共部分:'\ d {3}(\ d {2})?' – Ether 2010-08-20 20:24:37

1

非常接近。这应该这样做...

day1otlk_\d{3,4}\.gif 

大括号{}允许您指定重复的字符{3,4}或类似{4}一个确切的数字的数量不等。

1

你用大括号指定一个范围量词:

qr/day1otlk_\d{3,4}\.gif/i 
1

可以指定将有3或4个数字与下列:

day1otlk_\d{3,4}\.gif 

{}repetition修饰符。这比*+更精确一些。您可以使用它来指定前一个模式的重复次数或重复范围的确切数量。

a{m} - 正是米的
a{m,} - 至少米的
a{m,n} - 至少米,但至多n a的