Explorar el Código

修复拆分剧集内容的公共方法

lh hace 4 semanas
padre
commit
a786b195b4
Se han modificado 1 ficheros con 7 adiciones y 9 borrados
  1. 7 9
      app/Libs/Helpers.php

+ 7 - 9
app/Libs/Helpers.php

@@ -5131,15 +5131,13 @@ function splitContent($content) {
     // 5. "第"字与数字、数字与章节关键字之间可能有空格
     // 6. 前后可能有#、*、·等修饰符号,后面可能有冒号、空格、标题文字等
     
-    // 先预处理:将标题前后添加换行符,确保标题能被正确识别和拆分
-    // 匹配模式:可能有前缀符号 + "第" + 空格(可选) + 数字 + 空格(可选) + 章节关键字 + 可能的标题内容
-    $pattern = '/([#*·\-_=\s]*)第\s*([一二两三四五六七八九十百千万0-9]+)\s*([章节集幕场话])([^第\n]*?)(?=第\s*[一二两三四五六七八九十百千万0-9]+\s*[章节集幕场话]|$)/u';
-    
-    // 先在每个标题前插入换行符(如果前面不是换行的话)
-    $content = preg_replace('/([^\n])([#*·\-_=\s]*)第\s*([一二两三四五六七八九十百千万0-9]+)\s*([章节集幕场话])/u', "$1\n\n$2第$3$4", $content);
-    
-    // 现在用修改后的模式匹配(标题应该在行首或接近行首)
-    $pattern = '/^[#*·\s\-_=]*第\s*([一二两三四五六七八九十百千万0-9]+)\s*([章节集幕场话]).*$/mu';
+        // 先预处理:仅在"第X集/章"位于某段正文末尾(可能因未换行粘连)时补换行使其独立成行;
+        // 支持正文末尾直接跟"第X集"或"第X集:标题"的粘连格式;
+        // 正文中间出现的"第X集"字样(如"真假千金文里第一集就被赶出厂")保持不动,避免误判为章节标题
+        $content = preg_replace('/([^ \t\r\f\v\n#*·\-_=])(第\s*[一二两三四五六七八九十百千万0-9]+\s*[章节集幕场话])((?:[::][^\n]*|[ \t\r\f\v]*))$/mu', "$1\n\n$2$3", $content);
+        
+        // 匹配章节标题:标题必须位于行首(前面仅允许空格/Tab 或 #*·-_= 等修饰符),避免跨行误匹配
+        $pattern = '/^[#*·\-_= \t]*第\s*([一二两三四五六七八九十百千万0-9]+)\s*([章节集幕场话]).*$/mu';
     
     // 用正则找出所有章节标题的位置
     if (preg_match_all($pattern, $content, $matches, PREG_OFFSET_CAPTURE)) {