2015-06-10 87 views
0

我想使用preg_replace刪除alt屬性。這裏是ALT的pattern屬性使用preg_replace替換alt attriute?

alt="Screen Shot 2015-06-09 at 11.37.40 AM" 

,也可能是這樣的

alt="The Postmates sign outside the office" 

可以有引號內的任何字符。我用下面的表達式:

$html = preg_replace('/alt="\w+\s\w+"/', '><br>', $html); 

但只替換型的ALT屬性:

alt="The Postmates" 

什麼是這裏的合適的表達?

+0

你可能會更接近'/ alt =「([\ w \ s] *)」/''。當然,你仍然會遇到破折號和其他特殊字符的問題。主要觀點是使用[字符集](http://www.regular-expressions.info/charclass.html)。 – lzam

回答

2

.*?應該這樣做。

$html = preg_replace('/alt=".*?"/', '<br>', $html); 

這將在alt屬性及其與<br>內容取代一切。

阿里納斯在img元素的<br>沒有多大意義,如果這是你在做什麼......或者,因爲你有><br>也許你試圖關閉imgalt總是最後一個屬性?

.*?說發現了什麼,直到第一個「這個角色」,在這種情況下,雙引號....更詳細...

. =任意字符

* = 0或以上前面的字符的出現(如果你想ATLEAST一次發生與+代替)

? =使得*懶,這意味着止步於第一次出現,而不是最後

一個測試正則表達式的地方。 http://regex101.comhttp://www.phpliveregex.com/

一個學習regexs地方,http://www.rexegg.com/http://www.regular-expressions.info/,和其他許多網站。

下面是一個測試,你可以看到這個正則表達式的工作與http://www.phpliveregex.com/p/bvn

根據您的更新:

$html = preg_replace('/alt=".*?"\s*/\?s*>/', '><br>', $html); 

/\是逃避正斜槓,因爲正斜槓是你的分隔符。正斜槓後的?是因爲它是可選的。 \s*是零個或多個空格。這些可能在可選的正向斜線的任一側,這就是爲什麼我們都有。

+0

我忘了把結束標記。感謝你的回答。是的,ALT總是最後一個屬性。你能否給我提供一個鏈接到任何書籍或教程,我可以瞭解更多關於正則表達式? –

+0

鏈接提供以及更新的正則表達式。你也可能想看看HTML/XML解析器。 – chris85

+0

任何其他問題或問題? – chris85

0

我不知道正則表達式在PHP中的不同之處,但試試這個:

$html = preg_replace('~alt\s*=\s*"([^"]*)"~', '><br>', $html); 

在開始的時候,我們有ALT這是一個純文本。
Then \ s *表示「零個或多個空格」。它可以處理代碼如alt = "something"
=代表平原等號。
\ s *
([^「] *)表示」除引號之外的任何符號。

+0

請您提供一個解釋,以便我將來自己寫這些表達式? –

+0

您需要在PHP中使用正則表達式的分隔符。 ''alt \ s * = \ s *「([^」] *)「'''應該是''〜alt \ s * = \ s *」([^「] *)」〜''。 http://php.net/manual/en/regexp.reference.delimiters.php – chris85

+0

@ chris85哦謝謝。我只是從來沒有在PHP中使用正則表達式:) –