用PHP分割文件并生成内容

时间:2010-05-09 19:47:25

标签: php html text file-io

如何在没有占位符标记的情况下将下面的内容拆分为单独的文件。我还想将文本放在占位符标记内,并将它们放在新的内容文件中。

<div class='placeholder'>The First Chapter</div>

This is some text.

<div class='placeholder'>The Second Chapter</div>

This is some more text.

<div class='placeholder'>Last Chapter</div>

The last chapter.

感谢。

更新:

我已尝试过MartinodF代码的修改版本,但无法使其正常工作。

$text=file_get_contents("t.txt");


$parts = preg_split('/\n?<div class=\'placeholder\'>(.+?)<\/div>\n/im', $text, -1, PREG_SPLIT_DELIM_CAPTURE);
$parts_num = count($parts) / 2;

$titles = $files = array();
for($x = 0; $x < $parts_num - 1; $x++) {
    $titles[] = $parts[$x * 2 + 1];
    $files[] = $parts[$x * 2 + 1] . "\n" . $parts[$x * 2 + 2];
}


var_dump($titles);
var_dump($files);

echo $titles[1];

更新2:不再依赖于单独的txt文件,但仍无效。

$text="<div class='placeholder'>The First Chapter</div>
This is some text.
<div class='placeholder'>The Second Chapter</div>
This is some more text.
<div class='placeholder'>Last Chapter</div>
The last chapter.
";


$parts = preg_split('/\n?<div class=\'placeholder\'>(.+?)<\/div>\n/im', $text, -1, PREG_SPLIT_DELIM_CAPTURE);
$parts_num = count($parts) / 2;

$titles = $files = array();
for($x = 0; $x < $parts_num - 1; $x++) {
    $titles[] = $parts[$x * 2 + 1];
    $files[] = $parts[$x * 2 + 1] . "\n" . $parts[$x * 2 + 2];
}


var_dump($titles);
var_dump($files);

echo $titles[1];

3 个答案:

答案 0 :(得分:2)

使用Xml / HTML解析器遍历dom并提取所需内容。 Theres SimpleXml和DOMDocment直接进入php。或者您可以使用Zend_Dom_Query或SimpleHTML之类的东西。

答案 1 :(得分:0)

在我看来,你可以简单地使用正则表达式......

http://www.roscripts.com/PHP_regular_expressions_examples-136.html - 请参阅文档末尾有一些HTML正则表达式。

...但也许你只提出了部分任务。

答案 2 :(得分:0)

如果我理解你正在做什么(比如从某种脚本中提取每章的标题和内容),MartyIX是对的,你可以使用正则表达式:

$parts = preg_split('/\n?<div class=\'placeholder\'>(.+?)<\/div>\n/im', $text, -1, PREG_SPLIT_DELIM_CAPTURE);
$parts_num = count($parts) / 2;

$titles = $files = array();
for($x = 0; $x < $parts_num - 1; $x++) {
    $titles[] = $parts[$x * 2 + 1];
    $files[] = $parts[$x * 2 + 1] . "\n" . $parts[$x * 2 + 2];
}

var_dump($titles);
var_dump($files);

$ titles将是一个包含所有“标题”的数组,你可以在每一行写一个并拥有你的“内容”文件(就像索引一样)。

另一方面,

$ files将包含每个章节(标题,没有标签,新行,然后是文本),您可以将每个章节写入不同的文件,以便将文本拆分为章节。