如何使用正则表达式组匹配字符串中的4位以上

时间:2014-05-28 02:26:14

标签: regex preg-match

以下是测试数据:

LW_3_1_4_5mm_70KV_LE1_4X_2.7995um_Bin1_Export00120013.tiff LW_3_1_4_5mm_70KV_LE1_4X_2.7995um_Bin1_Export0013.tiff LW_3_1_4_5mm_70KV_LE1_4X_2.7995um_Bin1_Export0013 0013.tiff 3.tif 0004.tif .tif

我只想要(.tiff)之前的数字,我怎样才能得到数字? 例如。 firtdata的比赛结果是00120013。 第二个数据的匹配结果是0013。

这是我的regexPattern字符串:^。*(?\ d {4,8})。(tiff | tif)$,但结果不好,即使有超过4位数也只能获得4位数。

here is my work regex test view,but some results are not right

3 个答案:

答案 0 :(得分:0)

你的正则表达式是贪婪的,尽可能消耗,同时仍允许匹配。

?之后加.*

,将量词变为不情愿
^.*?(?\d{4,8}).(tiff|tif)$

或者,更容易阅读,你可能要求第一个术语的最后一部分是非数字,你可能应该逃避点,并可以简化最后一部分。

试试这个:

^.*\D(\d{4,8})\.tiff?$

答案 1 :(得分:0)

这是因为。*是一个贪婪的运营商。换句话说,它会消耗每个字母,只有当模式的其余部分不匹配时才会回溯。通过使其变得懒惰(。*?)您将获得尽可能多的数字(最多8个)。

答案 2 :(得分:0)

这是正确的表达式:(^。* \ D)?(\ d {4,8})。(tiff | tif)$

 test view