php warning: preg_replace(): Unknown modifier 'c'
做一个打印模板的功能,需要替换掉模板中对应标记的内容。对于确定的替换字符串,可以使用 str_replace()
函数,但对于一个标签块内的内容处理,需要使用到正则,具体如下:
content = preg_replace('/<offline>.*?</offline>/i', '', $content);
该正则的目的是清除 <offline>
与 </offline>
之间的所有内容。但是执行的时候报错了: preg_replace(): Unknown modifier 'o'
。
网上查了一下,是因为正则表达式以 /
标记开始和结尾,而 </offline>
中的 /
被识别为正则的结尾,o
作为结尾处的修正符无法识别,所以报错了。
那么通常遇到这种在正则中间但包含了特别字符 /
的情况怎么处理呢? 使用 \
转义即可。
content = preg_replace('/<offline>.*?<\/offline>/i', '', $content);
正则表达式中这种转义的方式很常见,加上去莫名觉得顺眼多了,继续执行。
执行结果发现,没有替换任何东西。确认了一下,原来默认正则是匹配单行的,需要使用修正符(modifier) s
content = preg_replace('/<offline>.*?<\/offline>/si', '', $content);
顺便说一下几个修正符的作用:
s
表示匹配多行i
表示忽略大小写.
表示匹配回车换行