PHP中从ChatGPT生成的动态字符串提取主题与正文内容的方法
PHP中从ChatGPT生成的动态字符串提取主题与正文内容的方法
我明白你现在的困扰——ChatGPT返回的字符串是动态的,但好在它大概率会保留Subject:和Body:这样的标记,我们可以利用这个规律来提取内容。下面给你两种简单可行的方法,都是PHP里常用的字符串处理方案:
方法一:正则表达式(推荐,灵活性更高)
正则能很好地应对动态字符串里的换行、空白差异,直接匹配标记之间的内容:
$string = "Subject: Update on Your Ticket: ID {{ random_number }} Body: Hello, Your ticket has been recently updated on {{ date }}. We kindly request you to review and acknowledge the changes made. If you have any further updates or queries regarding your ticket, please don't hesitate to respond to this email. Best Regards, {{ sender_name }}"; // 提取主题:匹配Subject:之后到Body:之前的所有内容 preg_match('/Subject:\s*(.*?)\s*Body:/s', $string, $subjectMatches); $subject = trim($subjectMatches[1] ?? ''); // 用trim去掉前后多余的换行和空格 // 提取正文:匹配Body:之后的所有内容 preg_match('/Body:\s*(.*)/s', $string, $bodyMatches); $body = trim($bodyMatches[1] ?? ''); // 测试输出 var_dump($subject); var_dump($body);
正则说明:
s修饰符:让.可以匹配换行符,这样能跨行抓取内容\s*:匹配任意数量的空白(包括换行、空格、制表符),兼容ChatGPT可能的格式小差异.*?:非贪婪匹配,确保只抓Subject到Body之间的内容,不会多拿
方法二:字符串分割(适合格式相对固定的情况)
如果ChatGPT返回的格式特别规整,也可以用explode()分割字符串:
// 先按Body:分割,把字符串分成主题部分和正文部分 $parts = explode('Body:', $string); $body = trim($parts[1] ?? ''); // 再从主题部分里提取Subject内容 $subjectPart = explode('Subject:', $parts[0] ?? ''); $subject = trim($subjectPart[1] ?? ''); // 测试输出 var_dump($subject); var_dump($body);
这个方法更直观,但如果ChatGPT生成的字符串里出现了Subject:或Body:这样的词在内容里(概率很低,但要考虑),就会出错,所以还是正则更稳妥。
你可以根据实际测试的ChatGPT返回格式调整,一般第一种方法就能覆盖大部分情况啦!
备注:内容来源于stack exchange,提问作者Manisha
相关产品推荐
相关产品推荐

