我正在尝试使用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 :(得分:2)
使用lookarounds (?<!\d)
和(?!\d)
:
/(?<!\d)(?:187906|187909)(?!\d)/
请参阅regex demo。
如果在两个数字中的任何一个之前有一个数字,那么(?<!\d)
负向后看将使比赛失败,如果在两个数字中的任何一个之后有一个数字,则(?!\d)
否定前瞻将使比赛失败。
由于该号码看起来位于具有特定扩展名的文件名的末尾,您甚至可以使用
/(?<!\d)(?:187906|187909)\.jpg$/i
其中\.jpg$
将匹配字符串末尾的.jpg
($
)和/i
修饰符将使模式不区分大小写。