我正在尝试找到匹配以下内容的正则表达式:
<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 ...
另外,我在提出问题之前尝试搜索,但找不到任何类似的问题。
答案 0 :(得分:8)
你忘了逃避斜线......
preg_replace("/<style\\b[^>]*>(.*?)<\\/style>/s", "", $body);
有关修饰符here的更多信息。
为什么我们需要2个反斜杠,因为我们需要在字符串中使用反斜杠字符来逃避斜杠。不幸的是,在PHP中,我们需要一个双反斜杠\\
来表示所有单引号或双引号字符串中的单个反斜杠字符。这不是必须的,但是当事情变得复杂时,它会让事情变得更加清晰。
或者,您可以选择其他字符作为标识符。例如,
preg_replace("|<style\b[^>]*>(.*?)</style>|s", "", $body);
这样,您可以避免转义斜杠。
编辑:添加修饰符以使替换“工作”。
EDIT2:添加了模式字符串中双反斜杠的说明。
EDIT3:添加了替代方案。