2017-09-03 19 views
1

我與file_get_contents()工作,我得到的結構是這樣的一些HTML字符串:如何刪除每個選項標籤內的文本的後半部分?

$html = " 
<select> 
    <option>I need this part 1/ I don't need this 1 </option> 
    <option>I need this part 2/ I don't need this 2 </option> 
    <option>I need this part 3/ I don't need this 3 </option> 
    ... 
    <option>I need this part 50/ I don't need this 50 </option> 
</select>"; 

我想擺脫所有/ I don't need this [n]的。

任何想法如何做到這一點?

+0

你的問題或更好的任務不清楚。請更準確地說明您實際上對哪些結果感興趣。因此,如何_exactly_定義應該保留哪些部分的標記以及應該放棄哪些部分。 – arkascha

+0

歡迎使用堆棧溢出,請花點時間瀏覽[歡迎遊覽](https://stackoverflow.com/tour),以便在此處瞭解您的方式(並獲取您的第一個徽章),請閱讀[創建一個最小,完整和可驗證的例子](https://stackoverflow.com/help/mcve),並檢查[如何問好問題](https://stackoverflow.com/help/how-to-ask)你增加了獲得反饋和有用答案的機會。 –

+0

除此之外:請了解本網站的工作原理。 SO不是免費的編碼服務。我們不在這裏爲你做你的工作。我們在這裏幫助您解決您在嘗試自己解決任務時遇到的問題。爲此,您需要顯示自己實際嘗試的代碼。我們還應該如何幫助解決這個問題? – arkascha

回答

2

代碼:(Demo

$html = " 
<select> 
    <option>I need this part 1/ I don't need this 1 </option> 
    <option>I need this part 2/ I don't need this 2 </option> 
    <option>I need this part 3/ I don't need this 3 </option> 
    ... 
    <option>I need this part 50/ I don't need this 50 </option> 
</select>"; 

echo $html=preg_replace('~/.*<~','<',$html); 
  • 使用~的模式定界符,這樣你就不必逃避你的正則表達式中的斜槓。
  • .可以應該貪婪因爲點不會去到新的生產線,除非你告訴它(通過使用在模式的最後一個s標誌),如果你的任何不需要的子字符串包含<這將保護你的HTML文本不被破壞。
  • 請勿使用捕獲組,因爲它會減慢您的模式,並且您沒有在替換字符串中使用任何捕獲引用。

輸出:

<select> 
    <option>I need this part 1</option> 
    <option>I need this part 2</option> 
    <option>I need this part 3</option> 
    ... 
    <option>I need this part 50</option> 
</select> 

最後,如果您不需要的子串不包含<,那麼下面的模式&替換文本將遠遠勝過我上面的方法:

模式:~/[^<]+</~ 替換:</ Regex Demo

相關問題