2015-05-01 66 views
1

我有一段沒有格式化的段落。我想在段落中找到模式,並通過在模式的每次下一次出現之前插入換行符來對其進行格式化。我正在努力形成正則表達式模式,我無法找出放置換行符的邏輯。如果找到正則表達式,插入換行符

 $txt=$_POST['wtfb']; 
     $re1='((?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Sept|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?))'; # Month 1 
     $re4='.*?'; # Non-greedy match on filler 
     $re5='(:)'; # Any Single Character 1 

     if ($c=preg_match_all ("/".$re1.$re4.$re5."/is", $txt, $matches)) 
     { 
      $month1=$matches[1][0]; 
      $c1=$matches[2][0]; 
      echo 'Match'; // Instead of Match, I want to echo the formatted paragraph 
     } 
     else 
     { 
      echo 'No match'; 
     } 

輸入將是這樣的:

May 1, 9:17 AM - Jef23: Hey bro. Jeff hereMay 1, 9:18 AM - $tella2: Could you help me 

輸出將是這樣的:

May 1, 9:17 AM - Jef23: Hey bro. Jeff here 
May 1, 9:18 AM - $tella2: Could you help me 

UPDATE:線突破的部分已經完成。找出正則表達式讓我感到緊張。它必須檢測月份,空格,日期,逗號,逗號字符,時間,空格,連字符,空格,字符串,數字,字母和以冒號結尾的特殊字符。有人可以幫我解決這個問題嗎?

+0

你需要'$ c1'和'$ month1'作爲東西嗎? – Rizier123

回答

3

UPDATE

<?php 
    $input = 'May 1, 9:17 AM - Jef23: Hey bro. Jeff hereMay 1, 9:18 AM - $tella2: Could you help me'; 
    $output = trim(preg_replace('/(((?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Sept|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?))\s\d+,\s\d+:\d+\s[A|P]M\s-\s[^:]+)/is', "\n$1", $input)); 
    echo '<pre>', $output, '</pre>'; 
?> 

5月1日9:17 - Jef23:嘿,哥們。傑夫這裏
5月1日上午09時18分 - $ tella2:你能不能幫我

這使所需的輸出。您可能不需要匹配用戶名,因此您可以忽略\s[^:]+

OLD

你去那裏。我只是搜索月份+數字+「:」模式,然後插入\ n。

<?php 
    $input = "May 1: Hi, this is JeffMay 1: Hi, this is StellaMay 1: How are you?"; 
    $output = trim(preg_replace('/(((?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Sept|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?))\s\d+:\s)/i', "\n$1", $input)); 
    echo '<pre>', $output, '</pre>'; 
?> 

5月1日:嗨,這是傑夫
5月1日:嗨,這是斯特拉
5月1日:你好嗎?

+0

OP將如何獲得'$ c1'和'$ month1'? – Rizier123

+0

他沒有要求'$ c1'和'$ month1',而是要求格式化輸出。如果你看看他的帖子,他說*而不是匹配,我想回顯格式化的段落*,因此他想使用這些變量輸出正確的格式,這對他的解決方案來說是不需要的。 – Robert

+0

是的輸出,但我認爲他分配上述變量的原因。 – Rizier123