2017-01-26 10 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'と思っています。アルファまたはフルストップのために文字クラスを使用することもできます。 – chris85

答えて

2

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

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

regex demoを参照してください。

(?<!\d)負のlookbehindは、2つの数字のいずれかの前に数字があり、どちらかの数字の後に数字がある場合は(?!\d)負の先読みが失敗すると一致しません。その数は、特定の拡張子を持つファイル名の最後にあるように見えますので

することは、あなたも\.jpg$は、文字列の末尾($)で.jpgと一致して/i修飾ます

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

を使用することができますパターンの大文字と小文字を区別しません。

+1

これは私のために働き、答えを説明してくれてありがとう。 :-) – Reado

関連する問題