我正在开发一个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"
答案 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”相似但不相同: