递归火山软件开发平台

标题: 想实现正则批量取文本返回文本数组,有点问题不懂。 [打印本页]

作者: Yes    时间: 2024-11-5 11:37
标题: 想实现正则批量取文本返回文本数组,有点问题不懂。
本帖最后由 Yes 于 2024-11-5 11:40 编辑

(, 下载次数: 738)

一次性加入成员可以实现,但放在循环里最后返回的结果就不对了,仅仅返回的是最后一次加入的成员,这里火山安卓我不会写了,按照易语言的方法写完也不行,各位大师请帮忙指点一下,谢谢!
作者: 创世魂    时间: 2024-11-5 22:38
无名模块里面有一个  文本_取中间文本批量_正则    的源码,可以看看,参考学习一下。
无名模块下载:https://bbs.voldp.com/thread-3403-1-1.html

作者: Yes    时间: 2024-11-6 09:11
本帖最后由 Yes 于 2024-11-6 09:27 编辑


局_匹配器 = 正则表达式类.编译 (左文本 + ".*?" + 右文本, ).创建匹配器 (源文本)
判断循环 (局_匹配器.查找下一个 ())

这样可以实现了。

谢谢,之前用模块实现了,后来不知道是模块更新了还是怎么的调试出现各种错误, 可能是我的火山安卓没更新,所以想从源码自己写一下。
好像这个模块都是成品,没有源码吧?


作者: Yes    时间: 2024-11-6 16:09
本帖最后由 Yes 于 2024-11-7 11:23 编辑

顶楼图片是正则取中间文本源码
调用时放在按钮点击下:出现如下错误,

错误: java.lang.IndexOutOfBoundsException: Index: 1, Size: 0
<E:\微云同步助手\文档net\Hsan\JK\JIKO.v>, 238: 错误: 位于 jK.O.启动类.正则取中间文本
<E:\微云同步助手\文档net\Hsan\JK\JIKO.v>, 35: 错误: 位于 jK.O.启动类.按钮_被单击
<E:\微云同步助手\文档net\Hsan\JK\JIKO.v>, 10: 错误: 位于 jK.O.启动类$7.dispatch
<D:\Program Files\vol_dev\win_android_chs_free\plugins\vprj_android\classlib\sys\android\base\a_ctrl_base.v>, 128: 错误: 位于 hsh.anzh.jb.窗口组件.被单击
<D:\Program Files\vol_dev\win_android_chs_free\plugins\vprj_android\classlib\sys\android\base\a_ctrl_base.v>, 157: 错误: 位于 hsh.anzh.jb.窗口组件$2.onClick


用纯文本测试没问题,但用这种网页源文本就通不过
有能力的大神给看看问题出在哪里。
部分源码如下
(, 下载次数: 6)
算是解决了,但不是一个好的办法,我把其中的引号和问号都替换后就通过了,达到目的就行了,水平不行,不求甚解吧,后续那位大神能够真正解决,记得给我个消息。



作者: 兵三进一    时间: 2024-11-7 16:23
这种简单的问题不难吧,连回复的人都没有
作者: Yes    时间: 2024-11-7 16:31
兵三进一 发表于 2024-11-7 16:23
这种简单的问题不难吧,连回复的人都没有

人qi不足
高手不屑回复
新手不会
仅此而已
作者: 兵三进一    时间: 2024-11-7 16:35
Yes 发表于 2024-11-7 16:31
人qi不足
高手不屑回复
新手不会

就是这个道理,
火山用户大多是从易语言转过来的,哪只不是千年的狐狸,
问题太简单没有挑战性别人不感兴趣!
作者: 萌萌哒的小肉串    时间: 2024-11-7 16:47
这个能不编译出吗
作者: Yes    时间: 2024-11-8 10:02
萌萌哒的小肉串 发表于 2024-11-7 16:47
这个能不编译出吗

(, 下载次数: 665)

这个是调试完成的,可以编译成功。

作者: weilai    时间: 2024-11-8 10:45
主要是没用过正则,要是不用正则的话,取起来感觉简单
作者: weilai    时间: 2024-11-8 17:26
本帖最后由 weilai 于 2024-11-8 17:30 编辑
weilai 发表于 2024-11-8 10:45
主要是没用过正则,要是不用正则的话,取起来感觉简单
<火山程序 类型 = "通常" 版本 = 1 />

方法 非正则取中间文本 <公开 类型 = 文本数组类>
参数 原文本 <类型 = 文本型>
参数 左文本 <类型 = 文本型>
参数 右文本 <类型 = 文本型>
{
    变量 长度 <类型 = 整数>
    变量 左长度 <类型 = 整数>
    变量 右长度 <类型 = 整数>
    变量 左首字符 <类型 = 字符>
    变量 右首字符 <类型 = 字符>
    变量 i <类型 = 整数 值 = 0>
    变量 左已匹配 <类型 = 整数 值 = -1>
    变量 左右文本是否相等 <类型 = 逻辑型 值 = 假>
    变量 返回值 <类型 = 文本数组类>
    长度 = 取文本长度 (原文本)
    左长度 = 取文本长度 (左文本)
    右长度 = 取文本长度 (右文本)
    如果 (长度 < 1 || 左长度 < 1 || 右长度 < 1)//此处没有处理左右文本为空文本的情况
    {
        返回(返回值)
    }
    左首字符 = 取文本字符 (左文本, 0)
    右首字符 = 取文本字符 (右文本, 0)
    如果 (左文本 == 右文本)
    {
        左右文本是否相等 = 真
    }
    i = -1
    判断循环 (i < 长度)
    {
        i = i + 1
        判断循环 (i < 长度 && 取文本字符 (原文本, i) != 左首字符 && 取文本字符 (原文本, i) != 右首字符)
        {

            i = i + 1
        }
        如果 (i >= 长度)
        {
            返回 (返回值)
        }
        变量 临时 <类型 = 整数>
        变量 j <类型 = 整数>
        如果 (取文本字符 (原文本, i) == 右首字符)
        {
            如果 (左已匹配 > 0)  // 右已经匹配匹配左边
            {
                临时 = i
                循环 (1, 右长度, j)
                {
                    临时 = 临时 + 1
                    如果 (临时 > 长度)
                    {
                        返回 (返回值)
                    }

                    如果 (取文本字符 (原文本, 临时) != 取文本字符 (右文本, j))
                    {
                        跳出循环
                    }

                }
                如果 (j == 右长度)  // 匹配成功
                {
                    返回值.添加成员 (取子文本 (原文本, 左已匹配 + 左长度, i - 左已匹配 - 左长度))
                    如果 (左右文本是否相等 == 真)//这里处理如果左右文本相等的情况
                    {
                        左已匹配 = i
                    }

                    i = i + 右长度
                    到循环尾


                }



            }

        }

        如果 (取文本字符 (原文本, i) == 左首字符)
        {
            临时 = i
            循环 (1, 左长度, j)
            {
                临时 = 临时 + 1
                如果 (临时 >= 长度)
                {
                    返回 (返回值)
                }
                如果 (取文本字符 (原文本, 临时) != 取文本字符 (左文本, j))
                {
                    跳出循环
                }

            }
            如果 (j == 左长度)  // 匹配成功
            {
                左已匹配 = i
                i = i + 左长度
                到循环尾
            }



        }

    }
    返回 (返回值)
}


作者: 兵三进一    时间: 2024-11-9 12:04
(, 下载次数: 4)

反正闲也是闲着,不如直接动手了

(, 下载次数: 408)

作者: Yes    时间: 2024-11-9 13:42
兵三进一 发表于 2024-11-9 12:04
反正闲也是闲着,不如直接动手了

高手就是不一样,代码真简练。
请问"\r\n",这是是代表什么?
作者: 兵三进一    时间: 2024-11-9 14:24
Yes 发表于 2024-11-9 13:42
高手就是不一样,代码真简练。
请问"\r\n",这是是代表什么?

"\r\n"就是易语言中的 #换行符

在这个网页源码中其实不用替换,这只是我个人的习惯操作!
作者: Yes    时间: 2024-11-9 14:51
学到了谢谢!
作者: weilai    时间: 2024-11-9 17:48
非正则其实也可以写的很短的
作者: weilai    时间: 2024-11-9 17:50
本帖最后由 weilai 于 2024-11-10 11:55 编辑


作者: weilai    时间: 2024-11-9 18:27
weilai 发表于 2024-11-9 17:50
方法 非正则取中间文本1
参数 原文本
参数 左文本

修改了下这样效果就一样了:噜阿噜
作者: weilai    时间: 2024-11-9 19:59
本帖最后由 weilai 于 2024-11-10 11:56 编辑


作者: Yes    时间: 2024-11-11 15:59
weilai 发表于 2024-11-9 18:27
修改了下这样效果就一样了:噜阿噜

不用正则也可以解决的比较完美,就是代码繁琐了一些。
作者: Yes    时间: 2024-11-12 14:47
weilai 发表于 2024-11-8 17:26
方法 非正则取中间文本
参数 原文本
参数 左文本

请教一下,您这段代码是从什么编辑器里面复制出来的?
我看到好多 都是这种格式的。





欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4