2011-04-21 58 views
2

我想爲一個爬蟲做一個排除正則表達式。我想索引出現在/archives/目錄中的所有.php文件,但不是其他任何地方。所以正則表達式應該匹配所有.php文件,除了那些在/archives/目錄中(但是深度嵌套)的文件。因此,例如,將指數正則表達式來找到一些.php文件

www.mysite.com/archives/123qwe/index.php 

但不

www.mysite.com/123qwe/index.php 

我相信這個正則表達式應該工作:(?<!\/archives\/.*)\.php$

不過,我不能夠使用<字符,因爲我需要將正則表達式提交到一個web表單中,該表單從輸入中清理<。並使用&lt;打破正則表達式。那麼有沒有另一種方式來形成這個正則表達式,而不需要<

+0

這個問題不是關於正則表達式本身,而是關於表單序列化。 – 2011-04-21 19:47:24

+0

我正在尋找一種替代方法來進行我的正則表達式匹配。我無法控制表單,所以我無法使用<。 – thugsb 2011-04-21 19:49:03

回答

2

什麼

(?!.*\/magazine\/)(?:^.*\.php$) 

這是一種消極的前瞻,而不是你的負面回顧後。如果字符串中沒有/magazine/並且它以.php結尾

這與您的方法非常相似,但沒有<

你可以看到它在這裏的行動上Regexr

+0

看起來很有希望。我會把它放在抓取工具中,如果它能正常工作,就給你投票......謝謝。 – thugsb 2011-04-21 21:14:15

+0

完美。它完全按照我的意願。謝謝! – thugsb 2011-04-25 14:55:23

0

難道你不能只是貪婪,並指定你想在你的正則表達式存檔?

^(\/archives\/.+?)\.php$ 
+0

這與我想要的相反。我的正則表達式必須**避免**匹配/archives/....php,只匹配具有.php但沒有/ archives /的URL。 – thugsb 2011-04-21 21:01:52

+1

明白了,謝謝你的確認 - 你在這個問題上自相矛盾。 「我想索引出現在/ archives /目錄中的所有.php文件,但不是其他任何地方。」 – Duniyadnd 2011-04-21 21:05:05

2

試試這個:

^www\.mysite\.com(?:/(?!archives/)[^/.]+)+\.php$ 

或者,更清晰:

^www\.mysite\.com 
(?: 
/    # After consuming the `/`... 
    (?!archives/) # if the next name isn't `archives`... 
    [^/.]+   # consume it. 
)+    # Repeat as needed. 
\.php$ 

當你創建一個正則表達式和你不知道如何繼續,向後看不應該成爲你達成的第一個工具。事實上,我傾向於把它們視爲最後的手段。它們不足以抵消它們引入的複雜性。

+0

我想我會使用'^ www \ .mysite \ .com(?:(?!/ archives /)\ S)+ \。php $',因爲它更短,並且不需要更多的量詞。我們兩個都仍然通過'www.mysite.com/123qwe/index/archives.php',但我認爲原來的規格沒問題。 – tchrist 2011-04-22 01:39:43

+0

看來後面似乎很麻煩!我在stema的回答中使用了正則表達式,但我懷疑這也可以起作用。謝謝。 – thugsb 2011-04-25 15:13:52