我有一个仅包含以下div的html字符串:
<div id="title">My Title</div>
<div id="image">http://www.mpahmplakdjfe.co.uk/images/01.jpg</div>
<div id="fullcontent">In this div there are some html elements more</div>
我需要从div“我的标题”等中提取内部文本。
如何用preg_match做到这一点?
我没有运气就尝试了以下(简单的html dom):
$html = new simple_html_dom();
$html->load_file($myhtml);
$ret = $html->find('div[id=title]')->innertext; (or outter)
echo $ret;
谢谢!!!!
答案 0 :(得分:0)
$subject = "<div id=\"image\">http://www.mpahmplakdjfe.co.uk/images/01.jpg</div>";
preg_match("/<div id=\".*\">(.*)<\/div>/", $subject, $matches);
print_r($matches[1]);
更详细地了解正则表达式:
https://regex101.com/r/tN6mD8/1
正则表达式在PHP中看起来有点混乱,因为双引号必须被转义。我总是先在一个单独的编辑器中写下我的。
修改:获取特定代码:
$subject = '<div id="image">http://www.mpahmplakdjfe.co.uk/images/01.jpg</div>';
$title = '"image"';
preg_match("/<div id=".$title.">(.*)<\/div>/", $subject, $matches);
答案 1 :(得分:0)
我有同样的问题,我使用正则表达式找到了解决方案。 Here is the answer适用于您的情况:
\<div.*?\>(.*?)<\/div>
答案 2 :(得分:-1)
preg_match('|<[^>]*title[^>]*>(.*?)<|', $html, $m);
会给你“我的头衔”。
preg_match('|<[^>]*image[^>]*>(.*?)<|', $html, $m);
会给你“http // www.mpahmplakdjfe.co.uk / images / 01.jpg”。
preg_match('|<[^>]*fullcontent[^>]*>(.*?)<|', $html, $m);
会在这里给你“一些文字”。
你可以这样做:
$html = '<div id="title">My Title</div>
<div id="image">http://www.mpahmplakdjfe.co.uk/images/01.jpg</div>
<div id="fullcontent">some text here</div>';
$m = array();
preg_match('|<[^>]*title[^>]*>(.*?)<|', $html, $m);
// inner text is in $m[1]
echo $m[1]; // == 'My Title'
如果您想从字符串中获取所有内部文字,请使用preg_match_all()
代替preg_match()
:
// say you have that string
$html = '<div id="fullcontent"><div>hi</div><div>hello</div></div>';
$m = array();
preg_match_all('|>(?<innerText>[^<]*)<|', $html, $m);
echo count($m['innerText']); // 2 ;how many matches
echo $m['innerText'][0]; // == 'hi'
echo $m['innerText'][1]; // == 'hello'
如果您绝对只想要来自<div>
的内部文字,那么您可以像这样修改上面的preg_match_all()
:
preg_match_all('|<div[^>]*>(?<innerText>[^<]+)<|', $html, $m);