1.问题是这个...我的脚本只承认。要么 !要么 ?在第一次发送结束时。 我可以让它识别“......”暂停点吗?
2.如果在我的wordpress帖子中,我有这样的文字:
第一个发送!然后是一些文字
比我点击
继续更多文字
我的剧本只显示“第一个发送!后面跟着一些文字”,并且在我点击的输入后没有任何内容。为什么?和想法?
以下是代码:
ob_start();
the_content();
$old_content = ob_get_clean(); // I put wordpress inside a variable
$content = strip_tags($old_content); // I use strip tags
preg_match('/(.*?[?.!])(.*)/', $content, $match);
$first_sentence = $match[1];
$the_rest = $match[2];
if ( $first_sentence != '' && $the_rest != '' ):
echo '<h2>'.$first_sentence.'</h2>';
echo '<p>'.$the_rest.'</p>';
else:
echo '<h2>About me:</h2>';
endif;
答案 0 :(得分:1)
preg_match('/(.*?[?\.!]{1,3})(.*)/', $content, $match);
应该在没有太多复杂化的情况下做到这一点。它会识别看起来不错的...
,!!!
,???
,但请记住.!?
也适合。遗憾的是,我现在无法测试任何更复杂的东西。
<强>更新强>
关于第二个问题。这是因为正则表达式在换行符结束。如果我没有弄错的话,您可以使用'/(.*?[?\.!]{1,3})(.*)/m'
打开多行模式。但我建议将代码更改为:
preg_match('/(.*?[?\.!]{1,3})/', $content, $match);
$first_sentence = $match[1];
$the_rest = substr($content, strlen($first_sentence));
因为它会有更好的表现
答案 1 :(得分:0)
难道你不能把所有内容都拿到第一个换行符吗?
类似的东西:
$firstnewline = strpos($text, "\n");
$header = substr($text, 0, $firstnewline);
$therest = substr($text, $firstnewline + 1);
如果需要,可以使用strip_tags(),regexp或简单的str_replace()进行进一步处理。