识别第一句的脚本,将其放在标题内,其余部分放在段落中

时间:2011-03-16 19:20:48

标签: php

嘿那里, 我有这个代码,我把wordpress帖子内容,把它放在一个变量中,然后匹配第一个句子,把它放在一个h2标题里,其余的放在一个段落里。

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;

2 个答案:

答案 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()进行进一步处理。