我是正则表达式的新手并且遇到了一些问题。
我有一个包含文本块的文本文件,我想将其放入数组中。每个文本块以“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#”和“** Deck **”之间的文本。到目前为止我所尝试的并没有返回任何结果:
preg_match_all("%Hand #(.*?)[*][*] Deck [*][*]%", $file, $array);
感谢您的帮助!
答案 0 :(得分:3)
.
与换行符不匹配。您可以使用s
(单行或“dotall”)修饰符更改此项:
preg_match_all("%Hand #(.*?)[*][*] Deck [*][*]%s", $file, $array);
如果您不希望自己的结果包含Hand #
和** Deck **
,那么捕获的替代方法就是:
preg_match_all("%(?<=Hand #).*?(?=[*][*] Deck [*][*])%s", $file, $array);
如果您确实需要它们,只需从第一个模式中删除括号即可。