2017-01-26 57 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

相關問題