2010-12-08 98 views
2

我使用PHP,很想做一些自動化的功能,這將取代破HTML屬性,如任何正則表達式來替換這樣的HTML屬性?

title="TV 40" is better" 

title="TV 40" is better" 

所以,我的問題是: 我怎麼能正則表達式來找到第二個雙引號?

+2

解析HTML的正則表達式[不是正確的工具](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454)。我甚至不想想如何解析無效的HTML :-)首先解決你的HTML問題。 – 2010-12-08 13:11:17

+0

你會如何知道該字符串是否有兩個雙引號而不是一個?我的意思是,如果這是可能的(以一般的方式)瀏覽器會有它,這不會是一個問題。 – willvv 2010-12-08 13:13:40

回答

-1

我對你想要完成的事情有些困惑。也許一個更大的例子會有所幫助。

  • 你有一個html文件,你寫了一個錯誤,你想解決它?
  • 你想寫一個程序,將修復任何破損的HTML?

有關您的問題的上下文的一些額外信息可能會有所幫助。


許多箱子你可能進行詢問,但是在vim這對我的作品(爲您提供的示例):

:%s/"\(.*\)"\(.*\)"/"\1\"\2"/g 

它會改變這一點:

title="TV 40" is better" title="TV 40" is better" 

title="TV of 40 inch, spelled also as, 40" is better" 

title="TV 40 is better" 

對此:

title="TV 40" is better" title="TV 40" is better 

title="TV of 40 inch, spelled also as, 40" is better 

title="TV 40 is better" 

但是它會打破這樣的事情(也就是已經工作):

title="TV 40 is better" title="TV 40 is better" 

我想我給我們您正在試圖解決將是有益的東西更多一些上下文之前提到的。


在從更一般,它通常是一個壞主意,試圖用正則表達式解析HTML。有太多事情會變得怪異。除非你知道html將以某種格式出現,否則我不會這樣做。 HTML不是regular language,所以用正則表達式解析是不可能的。你可以解決這個問題的唯一方法是如果你知道關於html的一些特別的東西。或者你只想在一個預定格式的html頁面中找到非常具體的東西。

根據傑夫Attwod,如果你試圖解析HTML與正則表達式「你是屈服於黑暗的神克蘇魯的呃...呃...代碼」的誘惑。 See this page

This answer也給出了一些很好的例子,說明爲什麼用正則表達式解析html是一個壞主意。

1

,你可以用這個代替正則表達式

$value = "HTML CODE"; 
html_entities($value, ENT_QUOTES, 'UTF-8'); 

我希望這可以幫助你,如果我錯了指正。