Bölünmüş PHP ile dosya ve içeriğini oluşturmak

3 Cevap php

Nasıl tutucu etiketleri olmadan ayrı dosyalar halinde aşağıda içeriği bölmek yok. Ben de tutucu etiketleri içindeki metni almak ve yeni bir içerik dosyası içine yerleştirmek istiyorum.

<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.

Teşekkürler.

GÜNCELLEME:

Ben MartinodF kodu değiştirilmiş bir sürümünü denedim, ancak çalışması için alınamıyor.

$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];

GÜNCELLEME 2: ayrı txt dosyasında artık bağımlı, ama hala çalışmıyor.

$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 Cevap

Dom üzerinde yürümek ve neye ihtiyacınız çekmek için bir Xml / HTML çözümleyici kullanın. Gidecekseniz SimpleXML ve DOMDocment php doğrudan Buit. Yoksa Zend_Dom_Query veya SimpleHTML gibi bir şey kullanabilirsiniz.

Bu sadece normal ifadeleri kullanabilirsiniz gibi geliyor bana ...

http://www.roscripts.com/PHP_regular_expressions_examples-136.html - HTML birkaç normal ifadeler var belgenin sonuna bakınız.

... Ama belki senin görevin sadece bir bölümünü sundu.

Ben (bir tür senaryo başlıkları ve her bölümün içeriğini ayıklanması gibi) ne yaptığınızı doğru anlamak, MartyIX doğru, düzenli ifadeleri kullanabilirsiniz:

$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);

$ Başlıkları tüm "başlıkları" içeren bir dizi olacak, her satırda bir tane yazmak ve (dizin gibi olacaktır) "içindekiler" dosya olabilir.

$ Dosya, diğer taraftan, size bölüme metin bölünmüş olması için farklı bir dosyaya her birini yazabilirsiniz (çevresinde etiketi olmadan başlık, satırbaşı ve ardından metni) her bölüm içerecektir.