php txt 章节,谈在一个将TXT按章节分割的PHP程序中的收获

阅读: 评论:0

php txt 章节,谈在一个将TXT按章节分割的PHP程序中的收获

php txt 章节,谈在一个将TXT按章节分割的PHP程序中的收获

最近在做一个自动分割txt小说的东西,能够将一整个txt文件按照章节进行分割,然后分解成一个个小的.txt文件保存起来并且能够获取有多少章节和每章的章节名。 我最初的想法是: ① 先使用fopen打开文件,然后while循环使用fgets函数按txt文件中每一行读取 ②

最近在做一个自动分割txt小说的东西,能够将一整个txt文件按照章节进行分割,然后分解成一个个小的.txt文件保存起来并且能够获取有多少章节和每章的章节名。

我最初的想法是:

① 先使用fopen打开文件,然后while循环使用fgets函数按txt文件中每一行读取

② 边读取 边使用正则匹配出是否在这一句话中含有 “第**章”或者是“第**节”的字符串。如果有的话就把它存到一个数组中去。

③ 全部循环完成后使用count来计算数组的大小,然后使用foreach循环数组,将每一章的章节名进行字符串拼接(比如拼接成 '#章节名#' 这样的形式存到数据库中便于以后使用explode等函数进行章节名的分割)。

然后我就按照这个思路开始敲代码了。。但是很快便遇到了第一个问题

---- 如何使用正则表达式来匹配中文!!!

之前一直都是使用正则表达式来匹配一些英文啊字符啊什么的,我也一直以来都以为正则表达式可以直接匹配汉字的,于是就写了下面这样的代码

if(preg_match("/第[0-9一二两三四五六七八九十百千万]*[章节]/i",$hangdata,$matches)){

}

我真的是把这个想的太容易了一点。。。结果就是什么也没有匹配出来。。

很多时候遇到问题第一想法就是不可能!!!然后就用把这行简单的代码看了一下,却没有发现有什么问题啊。。于是便开始百度,不得不说百度真的有很多有用的东西,很快便找到了网友共享的匹配中文字符的内容,要把汉字改成Unicode编码形式再去匹配。。。下面则是修改之后的代码

if(preg_match("/(x{7b2c})(s*)([x{4e00}x{4e8c}x{4e09}x{56db}x{4e94}x{516d}x{4e03}x{516b}x{4e5d}x{5341}x{767e}x{5343}0-9]+)(s*)([x{7ae0}x{8282}]+)/u",$hangdata,$matches)){

}

我想这次应该是没有问题了吧~正高兴着刷新了一下网页。。。我去 怎么又没出来东西。。是不是网友的贡献出错了?于是仔细检查了一边却还是没发现有什么问题,于是网上找个一个php在线中文手册看了一下,原来使用preg_match匹配中文要求被匹配的内容是UTF-8编码。。而从txt中读取出来的一般是GBK编码的

于是又在前面加了一行字符转换代码

$hangdata=mb_convert_encoding($hangdata,"UTF-8","GBK");

现在一运行~OK 完成了

但是就在滚动页面的时候却发现同一个章节的名字却被匹配出来两次甚至更多。。这个错误很严重啊,之前人家作者写了一章的内容,用这个一分变成好多章了。。

于是就在匹配出每一章的章节名的时候和距离他最近的读取出来的章节名进行对比,看是不是一样。

于是就在最开始定义了一个空的字符串变量

每次循环的时候都与当前章节名进行对比 如果一样,就不再把当前的这一个章节名记录下来,如果不一样就记录下了并把章节名赋给这个变量。

虽然还有一点不尽人意的地方,但是主要的功能基本都已经实现了

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

本文发布于:2024-01-28 16:43:08,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17064313918817.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:程序   章节   按章   txt   php
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23