采取一个大的文本的一部分

问题描述:

比方说,我们有一个字符串($文本)采取一个大的文本的一部分

I will help you out, if <b>you see this message and never forget</b> blah blah blah 

我想利用文字从“<b>”到“</b>”成一个新的字符串($文本2) 如何这可以做到吗?

我感谢任何帮助,我可以得到。谢谢!

编辑: 我想采取这样的代码。如果您要查找的行为

<embed type="application/x-shockwave-flash"></embed> 
+0

[从字符串中提取DOM元素的可能的重复,在PHP中。](http://*.com/questions/5126967/extract-dom-elements-from-string-in-php) – 2011-04-22 19:19:12

+0

我的答案有一个使用DOMDocument的完整示例 – adam 2011-04-22 19:29:54

如果你只是想在第一场比赛,不想匹配类似<b class=">,下面的工作:

更新的评论:

$text = "I will help you out, if <b>you see this message and never forget</b> blah blah blah"; 
$matches = array(); 
preg_match('@<b>.*?</b>@s', $text, $matches); 
if ($matches) { 
    $text2 = $matches[0]; 
    // Do something with $text2 
} 
else { 
    // The string wasn't found, so do something else. 
} 

但更多的东西复杂的,你真的应该把它解析为每个Marc B.的评论的DOM。

+0

我得到这个错误“未定义偏移:0”任何想法?在线“$ text2 = $ matches [0];” – Muazam 2011-04-22 19:39:24

+0

是的,你的$ text字符串没有'....'显然。你可以尝试一下我上面更新的示例(它也通过正确检查是否找到任何匹配来处理偏移问题)。 – 2011-04-22 19:46:33

+0

谢谢,它工作。但你认为我也可以得到标签吗?并获得像嵌入标签的东西?非常感谢! – Muazam 2011-04-22 20:07:07

strip_tags($text, '<b>'); 

将只提取<b> </b>

之间的部分字符串。

+0

不幸的是,这将返回字符串中不属于php或html标记(或NUL字符)的所有文本。他正在寻找的只是获取的内容 – adam 2011-04-22 19:28:56

使用这种糟糕的美富:http://fr2.php.net/domdocument

$dom = new DOMDocument(); 
$dom->loadHTML($text); 

$xpath = new DOMXpath($dom); 
$nodes = $xpath->query('//b'); 

在这里,您既可以通过每一个回路,或者如果你知道只有一个,只要抓住价值。

$text1 = $nodes->item(0)->nodeValue; 
+0

值得注意的是,该文本需要是有效的dom内容,否则xpath会对您,您的字符串,您的程序,您的用户和您的虚拟主机生气 – adam 2011-04-22 19:31:41

+0

亚当@我得到这个错误“调用未定义的函数loadHTML()”感谢您的帮助。这是否也适用于嵌入代码? – Muazam 2011-04-22 19:35:25

+0

哈哈,我的坏Muazam。我是白天的Java人,这就是为什么我写$ dom.loadHTML,当它应该是$ DOM-> loadHTML。你应该明确地使用这种方法来选择一个,因为它的全部OO和眼睛上的简短易用 – adam 2011-04-22 23:36:18