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

awm*_*awm 3 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>
Run Code Online (Sandbox Code Playgroud)

我需要正则表达式才能将它传递给preg_replace并从字符串中删除它.我有正则表达式的基本知识,并在审查了http://www.regular-expressions.info/examples.html上的基础后尝试了这一点.

preg_replace("/<style\b[^>]*>(.*?)</style>/", "", $body);
Run Code Online (Sandbox Code Playgroud)

但是这一行给出了以下错误 Unknown modifier 't' in ...

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

shi*_*kou 8

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

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

有关修饰符的更多信息这里.

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

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

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

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

编辑:添加修饰符使替换"工作".

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

编辑3:添加了替代方案.