3

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

<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 ...

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

4

1 回答 1

10

你忘了躲开斜线...

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

更多关于修饰符的信息在这里

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

或者,您可以选择不同的字符作为标识符。例如,

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

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

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

EDIT2:在模式字符串中添加了双反斜杠的解释。

EDIT3:添加了一个替代方案。

于 2013-08-06T19:51:16.490 回答