preg_match_all返回一个空数组

时间:2013-04-01 17:50:44

标签: php wordpress-plugin

我正在开发一个WordPress插件,我遇到了从正则表达式中获取正确信息的严重问题。

正则表达式的代码如下:

preg_match_all("|grass1(.*)grass2|i", $split[1], $out);

输出是一个空数组。

$ split [1]是电子邮件的正文(作为字符串)。

我希望提取grass1和amp;之间的所有信息。 grass2。所以在电子邮件的正文中(作为一个字符串)存在“grass1 Something Something grass2”,我需要Something Something作为输出。这就是问题所在,而且它很奇怪,因为如果字符串是主题,标题或整个电子邮件它可以正常工作它是有效的。所以我对发生的事感到困惑。任何帮助理解问题都会有所帮助。

电子邮件正文的样本:

"_NextPart_000_0098_01CE2BC1.BFAF9200
 Content-Type: text/plain charset="us-ascii" Content-Transfer-Encoding: 7bit
 grass1 I'm testing the before or after function. If successful you should see all of           this message in a future email. grass2" 

1 个答案:

答案 0 :(得分:1)

可能是grass1和grass2之间有一些换行符“\ n”,所以“m”(多行搜索)修饰符可能很有用:

preg_match_all("|grass1(.*)grass2|im", $split[1], $out);

请参阅PHP手册reference.pcre.pattern.modifiers.php以了解修饰符的参考。

例如,“s”(“。”匹配“\ n”)也可以替代:

preg_match_all("|grass1(.*)grass2|is", $split[1], $out);

添加 只是要清楚: “m”和“s”相似但不相同:

  • “s”让“。”(点)也与换行符匹配,因此“。*”匹配多行文字
  • “m”将模式应用于多行文本,因此“a \ nb”匹配以 a 结尾的行,并以 b 开头,换句话说,我可以使用“\ n”作为搜索模式