2010-12-08 46 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'); 

我希望这可以帮助你,如果我错了指正。