如何使用preg_replace删除字符串中的所有后续样式标记/模式出现?

时间:2013-08-06 19:49:15

标签: php regex preg-replace

我正在尝试找到匹配以下内容的正则表达式:

<style type="text/css"> .article-content{ position: relative;

padding-bottom: 140px;} .pane.pane-newsletter-contextual{ display: block;

bottom: 32px; position: absolute; left: 0px; margin-left: 0px; } </style>

我需要正则表达式才能将它传递给preg_replace并将其从字符串中删除。我掌握了正则表达式的基本知识,并在审核http://www.regular-expressions.info/examples.html

上的基础知识后尝试了这一点
preg_replace("/<style\b[^>]*>(.*?)</style>/", "", $body);

但是,这一行会出现以下错误Unknown modifier 't' in ...

另外,我在提出问题之前尝试搜索,但找不到任何类似的问题。

1 个答案:

答案 0 :(得分:8)

你忘了逃避斜线......

preg_replace("/<style\\b[^>]*>(.*?)<\\/style>/s", "", $body);

有关修饰符here的更多信息。

为什么我们需要2个反斜杠,因为我们需要在字符串中使用反斜杠字符来逃避斜杠。不幸的是,在PHP中,我们需要一个双反斜杠\\来表示所有单引号或双引号字符串中的单个反斜杠字符。这不是必须的,但是当事情变得复杂时,它会让事情变得更加清晰。

或者,您可以选择其他字符作为标识符。例如,

preg_replace("|<style\b[^>]*>(.*?)</style>|s", "", $body);

这样,您可以避免转义斜杠。

编辑:添加修饰符以使替换“工作”。

EDIT2:添加了模式字符串中双反斜杠的说明。

EDIT3:添加了替代方案。