2017-01-26 58 views
1

我想使用regexr.com写一个表达式来匹配下面的文件名中的一些特定数字。该表达式将用于PHP preg_match()方法中以识别应该在服务器上的文件;不匹配的文件将被删除。匹配给定字符串中的确切数字

在这个例子中,我希望表达式匹配187906和187909(所以其他文件可以被删除)。我想我可以写作(187906 | 187909),但当然也可以匹配11879066或11879099等等。数字之前和之后总是一个非数字字符;无论是字母还是全站式。

-rw-r--r--. 1 root root 2190476 Jan 26 16:48 source187905.jpg 
-rw-r--r--. 1 root root 1691755 Jan 26 16:48 source187906.jpg 
-rw-r--r--. 1 root root 1780389 Jan 26 16:48 source187907.jpg 
-rw-r--r--. 1 root root 1692330 Jan 26 16:48 source187908.jpg 
-rw-r--r--. 1 root root 1622615 Jan 26 16:48 source187909.jpg 
+0

\ D是一个非数字字符,所以'\ D(187906 | 187909)\ D'我认为会这样做。或者你可以使用一个字符类来进行alpha或者full-stop。 – chris85

回答

2

使用lookarounds(?<!\d)(?!\d)

/(?<!\d)(?:187906|187909)(?!\d)/ 

regex demo

(?<!\d)如果在两个数字之前有一个数字,并且(?!\d)负向超前将会在两个数字之后有一个数字时失败匹配,则负向倒序将会失败匹配。

由于这个数字看起来是在具有特定扩展名的文件名的末尾,你甚至可以使用

/(?<!\d)(?:187906|187909)\.jpg$/i 

其中\.jpg$将在字符串($)和/i修改结束匹配.jpg会使模式不区分大小写。

+1

这适用于我,并感谢您解释您的答案。 :-) – Reado

相关问题