php - 尝试将一个大的多行文件 preg_split 成一个数组

标签 php regex arrays preg-split

我有一个格式为...的文件

文件.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/

相关文章:

regex - 自定义GROK过滤器-Logstash-> Elasticsearch

javascript - 在我的例子中如何设置数组

c++ - C 指针数组作用域和函数调用

javascript - 为什么我的数组在 React 中没有引用而复制?

php - Group_Concat 不会工作

java - 使用扫描仪扫描冒号之前的字符串部分和冒号之后的部分

PHP 使用今天的日期生成一个随机数

获取带有 URL 的字符串的 Javascript 函数

php - MySQL 返回具有 2 个相等表连接的唯一列名

php - Facebook 连接 : unregister users with PHP library