匹配给定字符串中的确切数字

时间:2017-01-26 17:07:55

标签: php regex

我正在尝试使用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

1 个答案:

答案 0 :(得分:2)

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

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

请参阅regex demo

如果在两个数字中的任何一个之前有一个数字,那么(?<!\d)负向后看将使比赛失败,如果在两个数字中的任何一个之后有一个数字,则(?!\d)否定前瞻将使比赛失败。

由于该号码看起来位于具有特定扩展名的文件名的末尾,您甚至可以使用

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

其中\.jpg$将匹配字符串末尾的.jpg$)和/i修饰符将使模式不区分大小写。