可以说,这是我的字符串集:
HOME
this
could
have
many
lines
HOME
this
one
also
HOME
same
在下一次出现“ HOME”之前,我如何获得包括换行符在内的所有信息,如下所示:(为简洁起见,已缩短)
echo $matches[0]; // first home outputs 'this\n could\n have\n many\n lines\n'
echo $matches[1]; // second home outputs 'this\n one\n also\n'
echo $matches[2]; // third home outputs 'same\n'
// ... HOME(n)
到目前为止,我已经尝试过:
/HOME(.*?)\n(.*?)/gU
但我只得到字符串的第一行:echo $matches[0]; // outputs 'this'
echo $matches[1]; // outputs 'this'
echo $matches[2]; // outputs 'same'
// ... HOME(n)
注意:两个HOME之间的字符串可以具有可变的行数,这让我头疼
最佳答案
通过以下方式使用preg_split
:
preg_split('~^(?=HOME$)~m', $s, -1, PREG_SPLIT_NO_EMPTY)
请参见PHP demo。
细节:
^
-匹配行首(?=HOME$)
-正向超前检查行是否等于HOME
因此,代码在等于
HOME
的行的开头拆分。使用
PREG_SPLIT_NO_EMPTY
时,结果中将省略空匹配项。如果我们添加另一个前瞻:preg_split('~^(?!\A)(?=HOME$)~m', $s)
,可以避免这种情况。关于php - 在全局RegEx搜索中捕获下一次出现之前的所有内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43618845/