PHP如何为动态格式字符串的每行末尾添加英文句号?
解决PHP给动态名称的邮件行添加末尾句号的问题
没问题,这个需求其实不用因为名称是动态的就犯愁,PHP里有好几种简单的方式实现,不管每行开头的名称怎么变,都能准确给内容末尾加上英文句号。
方法一:按行拆分遍历处理
这种方法逻辑直观,适合需要额外处理空行或者特殊行的场景:
// 假设你已经把收集到的邮件正文存在这个变量里 $emailContent = "Name1: qqqq wwww eeee rrrr Name2: rrrr tttt yyyy name3: iiii oooo pppp aaaa name4: ssss dddd ffff gggg name5: hhhh jjjj kkkk"; // 按系统换行符拆分所有行 $lines = explode(PHP_EOL, $emailContent); $processedLines = []; foreach ($lines as $line) { // 跳过空行(如果不需要保留空行可以去掉这个判断) $trimmedLine = trim($line); if ($trimmedLine === '') { $processedLines[] = $line; continue; } // 先去掉行尾可能的空格,再加上句号 $processedLines[] = rtrim($line) . '.'; } // 把处理后的行重新拼接成完整字符串 $finalContent = implode(PHP_EOL, $processedLines); // 输出结果 echo $finalContent;
方法二:用正则表达式快速替换
如果不需要复杂的判断,正则可以一步到位,效率也不错:
$emailContent = "Name1: qqqq wwww eeee rrrr Name2: rrrr tttt yyyy name3: iiii oooo pppp aaaa name4: ssss dddd ffff gggg name5: hhhh jjjj kkkk"; // 使用/m修饰符让正则匹配每行的结尾,而非整个字符串的结尾 // 这里的正则会给每一行(包括空行)末尾加句号,如果不想处理空行,用下面的优化版 $finalContent = preg_replace('/$/', '.', $emailContent); // 优化版:只给有内容的行加句号 $finalContent = preg_replace('/^(\s*\S.*)$/', '$1.', $emailContent); echo $finalContent;
进阶:避免重复加句号
如果邮件正文里可能存在已经带句号的行,还可以加个判断,避免重复添加:
foreach ($lines as $line) { $trimmedLine = rtrim($line); if (trim($trimmedLine) === '') { $processedLines[] = $line; continue; } // 获取行尾最后一个字符 $lastChar = substr($trimmedLine, -1); // 定义不需要再加句号的标点集合 $existingPunctuations = ['.', '!', '?', ';']; // 如果行尾不是这些标点,才添加句号 if (!in_array($lastChar, $existingPunctuations)) { $trimmedLine .= '.'; } $processedLines[] = $trimmedLine; }
这几种方法都完全不依赖固定的名称,不管你的Name1/name3这类标识怎么变,都能精准处理行尾的内容~
内容的提问来源于stack exchange,提问作者baddar90
相关产品推荐
相关产品推荐

