Php正则表达式多行搜索问题

时间:2015-06-23 11:19:52

标签: php regex

我想在样式标记之间获取所有字符。 这是我的正则表达式

 '#<style>(.*?)</style>'

正确生成结果 但它不适用于多行

正确地为此工作:

<style>body { height: '100%'; }</style>

这不起作用

<style> 
body { 
  height: '100%'; 
}

</style>

我知道/ s或[/ s / S]或s会起作用,但我不知道它们会如何工作

此致

3 个答案:

答案 0 :(得分:1)

你可以使用模式修饰符在多线上与PCRE正则表达式匹配:http://php.net/manual/en/reference.pcre.pattern.modifiers.php

m是多线修改器。 s是允许点匹配新行的修饰符。那么像这样的模式怎么样:

'#<style>(.*?)</style>#ms'

我认为您也可以对i修饰符感兴趣,因为代码可以是<style><STYLE>或其他风格<StYlE>,它们都是有效的。

答案 1 :(得分:0)

使用它:

 <style>([\s\S]*)<\/style>

DEMO

答案 2 :(得分:0)

“”。匹配除\ n之外的任何单个字符,因此'<style>(.*?)</style>'在多行情况下不起作用。而[\ s \ S] *将匹配任何字符,包括\ n。