首先,我在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
)...
我很感激每一个帮助,谢谢!
答案 0 :(得分: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);
答案 1 :(得分:0)
如果<b>Date</b>
,<b>Name</b>
,<b>Hobby</b>
和<br />
以这种方式始终存在,我建议您使用strpos()和{{ 3}}
例如,要获取日期:
// 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));
答案 2 :(得分: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;
?>
答案 3 :(得分: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