2013-05-04 40 views
0

的preg_replace我有以下ereg_replace聲明:轉換ereg_replace在PHP

ereg_replace (".*alternative0=\"[^\"]*\"[ ]{0,10}>", "", $v); 

因爲ereg_replace已被棄用,我想將它升級到preg_replace,我也想升級我的代碼,所以只有第一次出現的將是更換。

preg_replace ("/.*alternative0=\".*?\".*>/", "", $v,1); 

但它似乎部分工作。

的主要問題是,當我有">之間的空白我預浸不起作用

這裏有一些例子,字符串我想改變:

<tag type="head" alternative0="not head">{!head!}</tag> 
<tag type="tail" alternative0="tail>{!not tail!}</tag> 

,但它也可能是:

<tag type="head" alternative0="not head">{! 
xxxx !}</tag> 

甚至:

<tag type="header" alternative0="not head " > {! blah bla !}</tag> 
+0

提示:先轉換。確保它像以前一樣工作。然後問一下關於你的(新)正則表達式問題的第二個問題和匹配次數。 – hakre 2013-05-04 21:24:56

+0

也許提供一些你希望匹配你的模式的示例字符串,因爲你將模式的行爲從'「[^ \」] *「[] {0,10}'轉換並略微改變爲'」。* 「''' – 2013-05-04 21:25:24

+0

也許有人可以向我解釋什麼是相當於」[] {0,10}「的preg,因爲這似乎是我的模式中唯一的問題。一些例子 – sd1sd1 2013-05-05 04:13:50

回答

0

你有這個更有效的模式:

preg_replace ('/.*alternative0="[^"]++"[^>]*+>/', "", $v, 1); 

你不能使用這樣的:.*>,因爲點匹配所有字符和量詞*是貪婪因此.*匹配的最後>太並且該模式中的>從不匹配或不匹配於良好的偏移量。

+0

謝謝卡西米爾,你的模式似乎不能正常工作,因爲它忽略了空格 – sd1sd1 2013-05-05 04:09:59

+0

卡西米爾,感謝很多iv'e做了一點修改,似乎工作'/.*alternative0="[^"]*+ 「[^>] * +> /' – sd1sd1 2013-05-11 09:59:27

+0

@ sd1sd1:抱歉,我還沒有看到您以前的評論!事實上,這種模式不符合無效屬性。 – 2013-05-11 10:49:14