当正则表达式正常时,为什么preg_match在标签之间找不到字符串?

时间:2014-08-18 09:53:23

标签: php html regex preg-match preg-match-all

我在这里有下一个问题。我尝试使用preg_match / preg_match_all在两个HTML注释标记之间获取字符串,但我得到的结果是带有大量记录的空数组。

这是我的代码:

$pattern = "/\<!-- Start of NewsTicker --\>(.*)\<!-- End of NewsTicker --\>/";
preg_match_all($pattern, $description , $matches);

正则表达式模式本身似乎是有效的,因为当我在$ description变量中的两个标签之间放置一个简短的示例字符串(如:&#34; 123456&#34;)时,它对我有用。

然而,对于现实生活中的内容,它并不起作用,我的猜测是因为内容的长度而发生这种情况。

以下是preg_match对我失败的真实案例: http://www.phpliveregex.com/p/6oJ

请问有人可以解释问题是如何解决的吗? 总是可以使用strpos,substr等简单的字符串函数,但是还有其他更好的选择吗?

非常感谢!

2 个答案:

答案 0 :(得分:3)

你应该添加&#34;匹配换行符&#34; flag,s

所以你的正则表达式应该如下:

$pattern = "/\<!-- Start of NewsTicker --\>(.*)\<!-- End of NewsTicker--\>/s";

答案 1 :(得分:0)

是否已尝试转义反斜杠和其他特殊字符?此外,在处理预格式化文本或RegEx时,通常最好使用单引号。

像这样:

$pattern = '/\\<\!-- Start of NewsTicker --\\>(.*)\\<\!-- End of NewsTicker --\\>/'
preg_match_all($pattern, $description , $matches);

也很有帮助:overapi.com/regex/