取一个大文本的一部分
Posted
技术标签:
【中文标题】取一个大文本的一部分【英文标题】:Take a part of a big text 【发布时间】:2011-08-11 04:11:34 【问题描述】:假设我们有一个字符串 ($text)
I will help you out, if <b>you see this message and never forget</b> blah blah blah
我想将文本从 "<b>
" 到 "</b>
" 转换成一个新字符串($text2)
如何做到这一点?
感谢我能得到的任何帮助。谢谢!
编辑: 我想要这样的代码。
<embed type="application/x-shockwave-flash"></embed>
【问题讨论】:
Extract DOM-elements from string, in php. 的可能重复项 我的答案有一个完整的使用DOMDocument的例子 【参考方案1】:strip_tags($text, '<b>');
将只提取<b> </b>
之间的字符串部分
如果这是您寻找的行为。
【讨论】:
不幸的是,这将返回字符串中不属于 php 或 html 标记(或 NUL 字符)的所有文本。他正在寻找的只是获取 s 的内部内容【参考方案2】:使用这个糟糕的 mofo:http://fr2.php.net/domdocument
$dom = new DOMDocument();
$dom->loadHTML($text);
$xpath = new DOMXpath($dom);
$nodes = $xpath->query('//b');
在这里,您可以循环遍历每一个,或者如果您知道只有一个,则只需获取值。
$text1 = $nodes->item(0)->nodeValue;
【讨论】:
值得注意的是,文本需要是有效的dom内容,否则xpath会对你、你的字符串、你的程序、你的用户和你的虚拟主机生气 Adam@ 我收到此错误“调用未定义函数 loadHTML()” 感谢您的帮助。这也适用于嵌入代码吗? 哈哈,我的坏 Muazam。我白天是一个 Java 人,这就是我写 $dom.loadHTML 的原因,而它应该是 $dom->loadHTML。您绝对应该在选定的方法上使用这种方法,因为它完全是面向对象的,而且简短易懂【参考方案3】:如果您只希望第一次匹配并且不想匹配<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”有什么想法吗?在线“$text2 = $matches[0];” 是的,你的 $text 字符串显然没有<b>....</b>
。您可以使用我上面更新的示例进行尝试(该示例还通过正确检查是否找到任何匹配项来处理偏移问题)。
谢谢,它成功了。但你认为我也能得到标签吗?并获得类似嵌入标签的东西?非常感谢!
对于嵌入,只需执行与上述相同的操作,但用“嵌入”替换每次使用的“b”。我不确定你想要标签的方式,但似乎你需要阅读更多关于正则表达式和 preg_match 的内容,以便你可以根据需要制作它们。上面显示了一般方法。祝你好运!
太棒了!感谢代码工作的帮助!非常感谢,非常感谢!以上是关于取一个大文本的一部分的主要内容,如果未能解决你的问题,请参考以下文章