2015-06-10 56 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中使用正则表达式:) –