我有一个没有格式化的段落。我希望在段落中找到模式,并通过在每次下一次出现模式之前插入换行符来对其进行格式化。我正在努力形成正则表达式模式,我无法找出放置换行符的逻辑。
$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
更新:换行部分完成。弄清楚正则表达式让我感到紧张。它必须检测月,空格,日期,逗号,逗号字符,时间,空格,连字符,空格,带有数字,字母和以冒号结尾的特殊字符的字符串的模式。有人可以帮我解决这个问题吗?
答案 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日:你好吗?