2013-03-19 73 views
0

這是一個普通的正則表達式問題,雖然我會將它應用於PHP。PHP - (正則表達式) - 查找不包含-num X的文件編號

我想找到不包含像-123x456-12345x678這意味着該格式始終-INT X INT字符串的所有文件。 (如圖像分辨率)。

該字符串是文件名的一部分。和「constsnts」是減號( - )的字符串之前跡象和中間的X(這既可以是大寫字母或沒有)

隨着THIS的幫助下紛紛拿出表達:

^(?:(?!STRING).)*$ 

或在我的情況:

^(?:(?!x).)*$ 

但是,這將排除包含一個x

如何添加■所有文件名他在x的兩側都有數字,當他們不知道它們有多少個數字時,但知道在那之前或之後可能有一個數字是文件名稱的一部分。 myfile-x1-456x78 9 VR。 myfile-x12

我需要在特定的x一個單獨的解決方案,或者X | x ...

+0

如果您在'PREG_GREP_INVERT'文件名列表中使用preg_grep()',則不會產生否定斷言。你也只是要求'\ d + x \ d +'? – mario 2013-03-19 01:46:20

+0

謝謝你的輸入mario,但我不知道什麼'\ d + x \ d +'的意思(沒有正則表達式專家在這裏...) – 2013-03-19 01:47:31

+0

*另請參見[開源RegexBuddy替代品](http://stackoverflow.com/questions/89718/is-there)和[在線正則表達式測試](http://stackoverflow.com/questions/32282/regex-testing)的一些有用的工具,或[RegExp.info](http:// regular-表達式.info /)爲一個更好的教程。 – mario 2013-03-19 01:52:58

回答

1

您可以使用一個倒置的搜索(在Linux與grep工具和-v--invert-match參數)或@mario建議在PHP中使用preg_grep()

要回答你的問題使用這個表達式:^(?!.*?-\d+[xX]\d+)(.*)$explained demo

同時匹配xX你也可以使用(x|X)或只是x如果與不區分大小寫的正則表達式修改使用。

+0

謝謝!它的作品..也是一個大的使用該網站的+1 ..它自動解釋正則表達式的功能是偉大的! – 2013-03-19 02:08:34

+0

至於你的編輯 - 這是我一直有的另一個困惑,這是'Xx'和'x | X'之間的區別。但我想這是另一個問題...再次感謝.. – 2013-03-19 02:12:09

+1

'[]'表示一個字符集,將匹配那裏列出的一個字符,所以我列出了x和X.'|'是OR,並且會嘗試匹配第一個字符,如果失敗,它會嘗試匹配第二個字符 – 2013-03-19 02:14:51

0

爲什麼即使使用PHP呢?使用grep的-L選項來查找與正則表達式不匹配的文件。

grep -L -- '-\d+x\d+' * 

你必須把正則表達式後--,這樣的grep不認爲正則表達式是一個命令行選項。

+0

爲信息。我在贏機器,但我會嘗試,當我將有機會切換到Linux。我將使用PHP,因爲它是網站的一部分(?) – 2013-03-19 05:10:23