0

首先,我在 SO 上找到了一些线程,例如here,但这并不是我想要的。

这是我拥有的文本示例:

Some text bla bla bla bla<br /><b>Date</b>: 2012-12-13<br /><br /><b>Name</b>: Peter Novak<br /><b>Hobby</b>: books,cinema,facebook

所需的输出:

2012-12-13
Peter Novak
books,cinema,facebook

我需要将此信息保存到我们的数据库中,但我不知道如何在<b>标签之间检测值(例如Date),然后立即检测值(在这种情况下: 2012-12-13)......

对于这方面的每一个帮助,我将不胜感激,谢谢!

4

4 回答 4

1

由于要遍历的 DOM 不多,因此 DOM 遍历工具对此无能为力。

这应该有效:

1)删除b标签之前的所有内容。

2) 删除b标签。DOM 遍历工具可以做到这一点,但如果它们是纯文本,即使是正则表达式也可以做到,它可以在同一遍中删除冒号和随后的空格:<b\s*>[^<]+</b\s*>:\s*

3)将标签序列更改 br为裸换行符(你真的想要吗?)。DOM 遍历工具可以做到这一点,但正则表达式也可以:(?:<br\s*/?>)+

$html = preg_replace('#^[^<]+#', "", $html);
$html = preg_replace('#<b\s*>[^<]+</b\s*>:\s*#', "", $html);
$html = preg_replace('#(?:<br\s*/?>)+#', "\n", $html);
于 2013-01-04T19:41:32.373 回答
0

If <b>Date</b>, <b>Name</b>, <b>Hobby</b> and the <br />'s will always be there in that way, I suggest you use strpos() and substr().

For instance, to get the date:

// Get start position, +13 because of "<b>Date</b>: "
$dateStartPos = strpos($yourText, "<b>Date</b>") + 13;
// Get end position, use dateStartPos as offset
$dateEndPos = strpos($yourText, "<br />", $dateStartPos);
// Cut out the date, the length is the end position minus the start position
$date = substr($yourText, $dateStartPos, ($dateEndPos - $dateStartPos));
于 2013-01-04T19:31:03.887 回答
0

使用PHP Simple HTML DOM Parser您可以轻松实现这一点(就像 jQuery 一样)

include('simple_html_dom.php');
$html = str_get_html('Some text bla bla bla bla<br /><b>Date</b>: 2012-12-13<br /><br /><b>Name</b>: Peter Novak<br /><b>Hobby</b>: books,cinema,facebook');

或者

$html = file_get_html('http://your_page.com/');

然后

foreach($html->find('text') as $t){
    if(substr($t, 0, 1)==':')
    {
        // do whatever you want
        echo substr($t, 1).'<br />';
    }
}

该示例的输出如下所示

2012-12-13
Peter Novak
books,cinema,facebook
于 2013-01-04T20:30:54.467 回答
0

假设格式是一致的,那么explode可以为您工作:

<?php
$text = "Some text bla bla bla bla<br /><b>Date</b>: 2012-12-13<br /><br /><b>Name</b>: Peter Novak<br /><b>Hobby</b>: books,cinema,facebook";
$tokenized = explode(': ', $text);
$tokenized[1] = explode("<br", $tokenized[1]);
$tokenized[2] = explode("<br", $tokenized[2]);
$tokenized[3] = explode("<br", $tokenized[3]);

$date = $tokenized[1][0];
$name = $tokenized[2][0];
$hobby = $tokenized[3][0];

echo $date;
echo $name;
echo $hobby;

?>
于 2013-01-04T19:44:04.447 回答