2011-03-16 26 views
0

嘿, 我有這段代碼,我把wordpress文章內容放進一個變量裏,並且與第一句相比,在h2標題內,其餘部分在段落內。腳本承認第一句話,把它放在一個標題裏面,其餘的放在一個段落裏

1.問題是這個......我的腳本只能識別。要麼 !要麼 ?在第一次犯罪結束時。 我可以讓它識別「...」暫停點嗎?

2,如果在我的wordpress後我有這樣的文字:

第一森泰斯!其次是一些文字

比我按下回車鍵

繼續與更多的文字

我的劇本只顯示「第一森泰斯!其次是一些文本」並沒有什麼後,進入我的打擊。爲什麼?和ideeas?

下面是代碼:

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; 

回答

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)); 

因爲將有更大的性能

+0

嘿,謝謝你,但是當wordpress爲我提供「輸入」空間的內容時,那部分爲什麼只能用於內容直到它進入「輸入」空間? – webmasters 2011-03-16 19:30:41

+0

順便說一下,preg match不起作用,爲什麼ideyas? – webmasters 2011-03-16 19:35:55

+0

呃...是的,它一定是因爲它preg_match作爲第三個參數需要引用,所以你必須在使用它之前定義該變量。 '$ match = null; preg_match ...' – Slava 2011-03-16 19:41:02

0

你就不能採取一切的第一個換行符嗎?

喜歡的東西:

$firstnewline = strpos($text, "\n"); 
$header = substr($text, 0, $firstnewline); 
$therest = substr($text, $firstnewline + 1); 

如果你願意,你可以做進一步的處理使用用strip_tags(),一個正則表達式,或者一個簡單的str_replace()函數。

相關問題