PHP Regex查找由两个换行符分隔的文本块


PHP Regex finding blocks of text seperated by two line breaks

我是regex的新手,有一些问题。

我有一个文本文件,其中包含要放入数组中的文本块。每个文本块以"Hand#"开头,以"**Deck**"结尾,并用换行符分隔。它看起来像这样:

Hand #...random digits
blah
blah
blah
blah
** Deck **...random digits
Hand #...random digits
blah
blah
blah
blah
** Deck **...random digits
Hand #...random digits
blah
blah
blah
blah
** Deck **...random digits

我希望每个数组元素都包含每对"Hand#"answers"**Deck**"之间的文本。到目前为止,我尝试过的没有返回任何结果:

preg_match_all("%Hand #(.*?)[*][*] Deck [*][*]%", $file, $array);

谢谢你的帮助!

默认情况下,

.与换行符不匹配。您可以使用s(单线或"dotall")修改器更改此项:

preg_match_all("%Hand #(.*?)[*][*] Deck [*][*]%s", $file, $array);

如果您不希望您的结果包含Hand #** Deck **,则捕获的替代方法是环视:

preg_match_all("%(?<=Hand #).*?(?=[*][*] Deck [*][*])%s", $file, $array);

如果您确实需要它们,您可以简单地从第一个模式中删除括号。