如果找到正则表达式,则插入换行符

时间:2015-05-01 07:20:59

标签: php regex

我有一个没有格式化的段落。我希望在段落中找到模式,并通过在每次下一次出现模式之前插入换行符来对其进行格式化。我正在努力形成正则表达式模式,我无法找出放置换行符的逻辑。

        $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

更新:换行部分完成。弄清楚正则表达式让我感到紧张。它必须检测月,空格,日期,逗号,逗号字符,时间,空格,连字符,空格,带有数字,字母和以冒号结尾的特殊字符的字符串的模式。有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

<强>更新

<?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日上午9: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日:嗨,这是Stella
  5月1日:你好吗?