我有一个格式为...的文件
文件.txt
[sectionone]
...
...
[sectiontwo]
...
...
[sectionthree]
...
...
格式与(对于那些熟悉的)smb.conf 非常相似,我希望在它的末尾有一个数组“section”字符串。最后我想做一个 preg_split 来获取文本的每一部分并像这样放入一个数组中......
Array
(
[0] => [sectionone]
...
...
[1] => [sectiontwo]
...
...
[2] => [sectionthree]
...
...
)
我知道我可以逐行阅读文件并以这种方式创建解决方案,但我非常固执,并试图找出适合我需要的解决方案。 当“[”(方括号)位于任何行的开头并且任何导致下一个方括号(换行符、制表符、任何字符等)的内容都是公平游戏时,必须发生拆分。我的尝试要么一无所获,要么数组计数为 1,所有内容都为 1。
$fileString = file_get_contents( '/tmp/file.txt' );
print_r( preg_split( "/^\[.*\]\n$/", $fileString );
...导致不希望的...
Array
(
[0] => [sectionone]
...
...
[sectiontwo]
...
...
[sectionthree]
...
...
}
任何帮助将不胜感激,因为我的正则表达式技能充其量只是初学者。提前致谢。
最佳答案
您或许可以使用 preg_match_all
代替?
$fileString = '[sectionone]
...
...
[sectiontwo]
...
...
[sectionthree]
...
...';
preg_match_all("/^\[.*?(?=\n\[|\z)/ms", $fileString, $matches);
print_r($matches);
这将匹配 [
直到它找到一个 \n
后跟一个 [
或在字符串的末尾。标志 ms
在这里很重要,它可以让 ^
匹配所有行的开头,并让 .
匹配换行符。
或者 split ...
print_r(preg_split("/\n(?=\[)/", $fileString));
仅当 [
后跟一个 \n
时才会匹配。
关于php - 尝试将一个大的多行文件 preg_split 成一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20616683/