2010-10-19 60 views
1

正則表達式對於刪除引用和目錄「uploads /」之間的任何內容會產生什麼影響?如何使用preg_replace刪除X和Y之間的內容?

使用regexpression發生器,我得到這個?:(?< = \ =「)[^] +(?=上傳/)

$block_data = preg_replace('/(?<=\=")[^]+?(?=uploads/)/g','',$block_data); 

但似乎是消除一切:(

+3

你可以舉一個輸入例子嗎? – 2010-10-19 17:19:30

+1

而不是一個正則表達式生成器,我會使用一個正則表達式檢查器,比如[在[dummyman](http://bokehman.com/regex_checker)(我的最愛)或者[gskinner](http://gskinner.com/) RegExr /)或[spaweditor](http://www.spaweditor.com/scripts/regex/)(用於PHP)或[regexlib](http://regexlib.com/RETester.aspx)。這樣你就可以學會自己寫,而且你不需要生成器。 – 2010-10-19 17:36:35

回答

3

你應該難逃「/」,「上傳/」和g不是有效的改性劑,加[^]是無效的,我想你想.代替

這是你的正則表達式:

/(?<=\=").+?(?=uploads\/)/ 

ideone

+0

感謝科林,這是工作,直到我注意到我一直在試圖弄清楚的一件事。如果有多個圖像/鏈接需要在同一行上執行此操作,則它看起來像抓取從第一個引號到最後一個上傳/路徑名的所有內容。即: – kilrizzy 2010-11-16 16:12:57

+0

http://ideone.com/Cd5oa – kilrizzy 2010-11-16 16:18:44

2

測試簡單的解決辦法是

$block_data = preg_replace('/(?<=").*?(?=uploads\/)/','',$block_data); 

所做的更改:

  1. 簡化您的回顧後和向前斷言
  2. 在先行
  3. 躲過了 /
  4. 刪除g修改,這是在PHP

這工作是不必要的,所以據我所知,減少first"middle/uploads/end"first"uploads/end"

+0

通過簡化您刪除外觀中的「=」部分(這可能很重要),並且您刪除了懶惰(可能很危險),並將其替換爲可選'.'(這是錯誤的初始正則表達式)。 – 2010-10-19 17:29:43

+0

@科林規範是「引用後」(因此,後面的變化)和「任何內容」(因此改爲'。*')。我已經改變了貪婪的'*'。 – lonesomeday 2010-10-19 17:33:29

相關問題